Java 单击以选中复选框

Java 单击以选中复选框,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我的问题是: 我尝试单击webdriver以选中一个复选框。首先,我尝试通过使用xpath、cssSelector、classname等单击。我使用firebug获得了路径,但编译器抱怨。它说没有这样的元素。所以我尝试用不同的方式来解决这个问题,当我发送两次Tab键时,我的选择就会出现在复选框中。在不使用回车键或空格键的情况下,如何单击它。(我尝试使用Google Recaptcha进行处理,所以如果我使用空格键或空格键,它会检测到我是一台机器。) 下面是我的java代码的一部分 Actions

我的问题是: 我尝试单击webdriver以选中一个复选框。首先,我尝试通过使用xpath、cssSelector、classname等单击。我使用firebug获得了路径,但编译器抱怨。它说没有这样的元素。所以我尝试用不同的方式来解决这个问题,当我发送两次Tab键时,我的选择就会出现在复选框中。在不使用回车键或空格键的情况下,如何单击它。(我尝试使用Google Recaptcha进行处理,所以如果我使用空格键或空格键,它会检测到我是一台机器。) 下面是我的java代码的一部分

Actions action = new Actions(driver);
    action.sendKeys(Keys.TAB).build().perform();
    Thread.sleep(1000);
    action.sendKeys(Keys.TAB).build().perform();
    Thread.sleep(1000);
    System.out.println("Tabbed");
    action.click().build().perform();//Try to click on checkbox but it clicks on somewhere space.

我在等你的帮助。谢谢

在执行“单击”之前,您需要将鼠标光标移动到元素位置。此外,如果您等待元素变为可见,这可能会有所帮助

WebElement element = driver.findElement(By.cssSelector("..."));
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(element)); //wait until the element is visible

action.moveToElement(element).click().perform();
如果您绝对不想通过CSS/XPath查找元素,那么需要找出元素的坐标。将以下脚本粘贴到chrome/firefox控制台中,然后按enter键:

document.onclick = function(e)
{
    x = e.pageX;
    y = e.pageY + 75; // navigation bar offset, you may need to change this value
    console.log("clicked at position (x, y) " + x + ", " + y);
}; 
现在,您可以单击网站上的复选框,位置将在控制台中打印。 获得的位置可通过Robot类使用:

Robot robot = new Robot(); //java.awt.Robot
robot.mouseMove(x, y); // moves your cursor to the supplied absolute position on the screen
robot.mousePress(InputEvent.BUTTON1_MASK); //execute mouse click
robot.mouseRelease(InputEvent.BUTTON1_MASK); //java.awt.event.InputEvent

请注意,这将真正将光标移动到绝对坐标。这意味着,如果分辨率发生变化或需要滚动到元素,则会出现问题。在获取坐标和使用WebDriver(
driver.manage().window().maximize()
)时,还应最大化浏览器,否则坐标将不匹配。

在执行“单击”之前,需要将鼠标光标移动到元素位置。此外,如果您等待元素变为可见,这可能会有所帮助

WebElement element = driver.findElement(By.cssSelector("..."));
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(element)); //wait until the element is visible

action.moveToElement(element).click().perform();
如果您绝对不想通过CSS/XPath查找元素,那么需要找出元素的坐标。将以下脚本粘贴到chrome/firefox控制台中,然后按enter键:

document.onclick = function(e)
{
    x = e.pageX;
    y = e.pageY + 75; // navigation bar offset, you may need to change this value
    console.log("clicked at position (x, y) " + x + ", " + y);
}; 
现在,您可以单击网站上的复选框,位置将在控制台中打印。 获得的位置可通过Robot类使用:

Robot robot = new Robot(); //java.awt.Robot
robot.mouseMove(x, y); // moves your cursor to the supplied absolute position on the screen
robot.mousePress(InputEvent.BUTTON1_MASK); //execute mouse click
robot.mouseRelease(InputEvent.BUTTON1_MASK); //java.awt.event.InputEvent

请注意,这将真正将光标移动到绝对坐标。这意味着,如果分辨率发生变化或需要滚动到元素,则会出现问题。您还应该在获取坐标和使用WebDriver(
driver.manage().window().maximize()
)时最大化浏览器,否则坐标将不匹配。

实际上这并不能回答我的问题,因为没有xpath、cssSelector等。我尝试在不使用WebElement的情况下处理它。我更新了我的答案,现在它不使用WebElement API。但这让事情变得更加复杂。你想避免使用它有什么原因吗?哇!我以前不喜欢它。事实上,我无法处理没有这样的元素例外的日子。我试着用不同的方式来做。这就是我所期望的。非常感谢你!实际上,这并没有回答我的问题,因为没有xpath、cssSelector等。我尝试在不使用WebElement的情况下处理它。我更新了我的答案,现在它不使用WebElement API。但这让事情变得更加复杂。你想避免使用它有什么原因吗?哇!我以前不喜欢它。事实上,我无法处理没有这样的元素例外的日子。我试着用不同的方式来做。这就是我所期望的。非常感谢你!