找到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 按钮时无法找到元素