如何使用Selenium实现按键和鼠标点击操作

4

我有一个问题,我的Selenium代码无法正确执行keyPress + click操作。

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

我正在使用Selenium 2.23和Firefox 10。我的代码如下(我尝试了4种不同的方法使其工作,但都没有成功):

FirefoxProfile profile = new FirefoxProfile();

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

List elements = 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();

有人能给我提供其他建议吗?

3个回答

3

这是一个Selenium中的错误, 影响在Windows上使用Firefox时,结合shift/control/alt点击。收藏该错误,或许他们会修复它。


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);

1
我认为这不是一个错误。
尝试使用以下代码(C#):
Action builder = new Actions(driver);
builder.KeyDown(Keys.Control);
builder.Click(element1);
builder.Click(element2);
builder.KeyUp(Keys.Control);
builder.Perform();  

或者对于您(Java):

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

只需替换

.Click(); .build(); .perform();

使用

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

应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接