找到java selenium元素,但单击一次不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到java selenium元素,但单击一次不起作用相关的知识,希望对你有一定的参考价值。

我有一段selenium代码来查找某个元素,然后点击这个相同的元素。找到该元素,但在此之后,点击似乎没有成功。这是查找元素的代码(不幸的是使用xpaths,因为没有id,它使用了很多自制方法):

String taakButton = "Start taak button";
String xpathButton = "//td[contains(text(),'" + datumhelper.formateerDatumVoorFlowAanmaakdatum(SoapHelper.datumVoorAanvraag5SpaarrekeningSns) + "')]/following-sibling::*[4]/button";
WebElement startButton = selenium.searchForElementByXpathWithoutSwitchToFrame(xpathButton, taakButton);

我使用上面的String xpathButton将WebElement存储在一个变量中,之后我将WebElement传递给另一个类中的方法:searchForElementByXpathWithoutSwitchToFrame查找该元素并验证它是否被找到。

WebElement startTaakButton = selenium.searchForElementByXpathWithoutSwitchToFrame(xpathStartTaakButton, taakButton);

找到该元素,现在点击它:

selenium.klikStartOfInzienTaak(startTaakButton, xpathStartTaakButton);

执行单击的klikStartOfInzienTaak方法如下所示:

public void klikStartOfInzienTaak(WebElement webElementToBeClicked, String xpathToBeClicked) throws InterruptedException {
Actions action = new Actions(driver);
//check to see if element is not null
Assert.assertNotNull("WebElement 'startOfInzienTaak' niet gevonden", webElementToBeClicked);
//Thread.sleep(2500);
//I use Action doubleClick in the hope that would work.       
action.moveToElement(webElementToBeClicked).doubleClick().build().perform();

我也使用常规driver.click().似乎元素被发现,因为它没有给NoSuchElementException,我看到焦点是要点击的元素,但没有任何反应:Button to be clicked

当我取消注释Thread.sleep它可以工作,但我不想使用Thread.sleep。

正如您在下图中看到的加载图像一样,在找到元素并单击后,页面似乎再次(重新)加载。这就是为什么Thread.sleep的作用:Button found and clicked but page (re)loading

有没有人知道该怎么做才能让我删除thread.sleep? Selenium必须再次等待页面重新加载,尽管已经找到该元素?

答案

尝试使用javascriptExecutor单击元素,

参考代码,

WebElement element = driver.findElement(By.xpath(xpathButton));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
另一答案

您可以使用WebDriverWait函数首先在网页中找到该元素,然后单击该元素。通过这个我不必使用thread.sleep。

WebDriverWait for_element = new WebDriverWait(20, TimeUnit.SECONDS);
for_element.until(ExpectedConditions.elementToBeClickable(driver.findElement(by what means u have to find the path);
dr.findElement().click();

希望这对你有用,因为它对我有用!

以上是关于找到java selenium元素,但单击一次不起作用的主要内容,如果未能解决你的问题,请参考以下文章

双击操作不起作用,而单击对 selenium 中的元素起作用

Selenium / Java:无法在离子搜索弹出窗口中找到元素

通过 AJAX 更新 wordpress 表单第二次不起作用

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:尝试使用 selenium 单击下一步按钮时无法找到元素

如何使用Java中的selenium从页数逐个单击“下一步”按钮

NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击 VISA 按钮时无法找到元素