Selenium - click不会触发任何操作也不会抛出异常

时间:2017-12-21 11:14:15

标签: java selenium

我正在使用Selenium Webdriver和java,我需要点击这个元素:

这是代码:

driver.get(urlHp);
WebDriverWait wait = new WebDriverWait(driver, 10);
By btn = By.cssSelector("#_content-it_it_jcr_content_home-par1_promo_-par_o > div > li> a> div.btn-wrapper > button".trim());
wait.until(ExpectedConditions.visibilityOfElementLocated(btn));

driver.findElement(btn).click();

我可以获取元素但不抛出任何异常,但点击不起作用。

请注意,该元素位于视口下方。

我该如何解决?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用下面给出的Actions类。

driver.get(urlHp);
WebDriverWait wait = new WebDriverWait(driver, 10);
By btn = By.cssSelector("#_content-it_it_jcr_content_home-par1_promo_-par_o > div > li> a> div.btn-wrapper > button".trim());
wait.until(ExpectedConditions.visibilityOfElementLocated(btn));
Actions actions = new Actions(driver);
WebElement btnElement=driver.FindElement(btn);
actions.MoveToElement(btnElement).Click(btnElement).Perform();

答案 1 :(得分:1)

尝试Javascript执行者:

JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].click()", driver.findElement(btn));

答案 2 :(得分:1)

Selenium只能点击可见元素。我的意思是,它应该用作用户使用你的应用程序。 Ranjith向您展示了什么:

JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].click()", driver.findElement(btn));

这是点击带有实际javascript代码的按钮。对于quickfix,这很好。但请记住,如果该元素的大小为1px乘1px,则此实现也会单击该元素。测试将通过,但您的应用程序无法使用。 我宁愿建议selenium使用scrollIntoView方法。

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

这样您就更接近实际的用户流程。