使用java键在Selenium WebDriver中按下(Ctrl +鼠标单击)

时间:2015-09-17 10:21:06

标签: java selenium-webdriver mouseevent keypress

我需要使用Selenium WebDriver(java)按下控制+鼠标单击键。我需要在我的脚本中选择多个元素。 有没有办法做到这一点?

我检查了Selenium库,发现selenium只允许按下特殊键和功能键。

5 个答案:

答案 0 :(得分:7)

您可以使用WebDriver中编写的库操作。

简要说明发生的事情:

首先按下“控制”按钮,然后在定义的WebElemen对象上单击(在本例中)3次,然后取消控制并完成操作。

在这种情况下,您可以选择3个项目(或打开3个新标签页),具体取决于您的Web元素。

Actions actions = new Actions(driver);
actions.keyDown(Keys.LEFT_CONTROL)
    .click(first_WebElement)
    .click(second_WebElement)
    .click(third_WebElement)
    .keyUp(Keys.LEFT_CONTROL)
    .build()
    .perform();

答案 1 :(得分:1)

在“操作”的帮助下完成,如下所示:

Actions action=new Actions(driver);
action.keyDown(Keys.CONTROL).build().perform();
driver.findElement(By.xpath(".//*[@id='selectable']/li[1]")).click();
driver.findElement(By.xpath(".//*[@id='selectable']/li[3]")).click();
action.keyUp(Keys.CONTROL).build().perform();

答案 2 :(得分:0)

使用jquery代码实现相同的功能

JavascriptExecutor js = (JavascriptExecutor) driver;  
String script = "e = jQuery.Event('click');e.ctrlKey = true;    $('secondRow_Css_locator').trigger(e);";
js.executeScript(script);

或者您也可以使用机器人类,但它可以暂时锁定您的屏幕

 Robot robot = new Robot();
 robot.keyPress(KeyEvent.VK_CONTROL);
 robot.keyRelease(KeyEvent.VK_CONTROL);
 robot.mousePress(InputEvent.BUTTON1_MASK);
 robot.mouseRelease(InputEvent.BUTTON1_MASK);

答案 3 :(得分:0)

从2018年开始弹出第一个结果。在FF 61之后(从47到61的直接跳转),它的工作状况还不错。不幸的是,没有答案对我有用。通过action.keyDown(Keys.CONTROL).click(myWebElements.get(i)).keyUp(Keys.CONTROL).perform();对其进行解决,只需逐个迭代每个元素

答案 4 :(得分:0)

在使用Mac的情况下,接下来是te代码:

use futures::{sync::mpsc::unbounded, Future, Stream}; // 0.1.27

fn main() {
    let (tx, rx) = unbounded::<&mut usize>();

    let mut val = 10;
    {
        let bor = &mut val;

        tx.unbounded_send(bor);
        rx.for_each(|item| {
            println!("Item: {}", item);
            *item = 20;
            Ok(())
        })
        .wait();
    }
}