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

问题描述 投票:1回答:3

我正在使用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();

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

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

我该如何解决?

java selenium
3个回答
1
投票

试试Javascript执行者:

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

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
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.