我正在使用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();
我可以获取元素但不抛出任何异常,但点击不起作用。
请注意,该元素位于视口下方。
我该如何解决?
答案 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
这样您就更接近实际的用户流程。