4

我的 Selenium 代码无法正确执行 keyPress + click 操作时遇到问题。

测试应该打开 jqueryui.com 链接并选择页面上的前 2 个 li 元素。

我正在使用 Selenium 2.23 和 Firefox 10。我的代码如下(我尝试了 4 种不同的方法让它工作但没有执行):

FirefoxProfile 配置文件 = 新的 FirefoxProfile();

profile.setEnableNativeEvents(true); WebDriver browser = new FirefoxDriver(profile); browser.get(" http://jqueryui.com/demos/selectable/ ");

列表元素 = browser.findElements(By.cssSelector("ol#selectable li"));

 Actions a = new Actions(browser);      
 a.keyDown(Keys.CONTROL)
 .moveToElement(elements.get(0))
 .click()
 .moveToElement(elements.get(1))
 .click()
 .keyUp(Keys.CONTROL)
 .build()
 .perform();

    Keyboard keyboard = ((HasInputDevices) browser).getKeyboard();
    keyboard.pressKey(Keys.CONTROL);
    List<WebElement> selectOptions = browser.findElements(By.cssSelector("ol#selectable li"));
    selectOptions.get(1).click();
    selectOptions.get(3).click();
    keyboard.releaseKey(Keys.CONTROL); 
    Actions builder = new Actions(browser);
    builder.keyDown(elements.get(0), Keys.CONTROL)
        .click(elements.get(0))
        .click(elements.get(1))
        .keyUp(Keys.CONTROL);
    Action selectMultiple = builder.build();
    selectMultiple.perform();

    Robot robot = new Robot();
    robot.delay(1000);
    robot.keyPress(KeyEvent.CTRL_MASK);
    elements.get(0).click();
    elements.get(1).click();
    robot.keyRelease(KeyEvent.CTRL_MASK);

    browser.quit();

任何人都可以帮我提出其他建议吗?

4

3 回答 3

3

这是Selenium 中的一个错误,影响 shift/control/alt 以及 Firefox for Windows 上的点击。给错误加注星标,也许他们会修复它。

于 2012-11-20T02:31:59.067 回答
2

我真的不知道为什么你的尝试都不起作用(尤其是第一个)。关键常数是一团糟。

无论如何,我已经能够完成这项工作(在 Windows XP 上):

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
elements.get(0).click();
elements.get(1).click();
robot.keyRelease(KeyEvent.VK_CONTROL);
于 2012-07-10T12:42:23.340 回答
1

我认为这不是一个错误。

尝试使用这个(C#):

Action builder = new Actions(driver);
builder.KeyDown(Keys.Control);
builder.Click(element1);
builder.Click(element2);
builder.KeyUp(Keys.Control);
builder.Perform();  

或为您(Java):

动作 a = 新动作(浏览器);a.keyDown(Keys.CONTROL) .moveToElement(elements.get(0)) .click() .moveToElement(elements.get(1)) .click() .keyUp(Keys.CONTROL) .build() .perform( );

只是代替

。点击(); 。建造(); 。履行();

采用

a.Click(YourWebElement);
a.keyUp(Keys.CONTROL);
a.build();
a.perform();

应该工作,

于 2015-06-26T09:56:26.737 回答