这是我的问题: 我尝试单击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.
我在等你的帮助。谢谢
答案 0 :(得分:2)
在执行"点击"之前,您需要将鼠标光标移动到元素位置。此外,如果您等到元素可见,它可能会有所帮助。
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()
)时最大化浏览器,否则坐标不会匹配。