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

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

我有一段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必须再次等待页面重新加载,尽管已经找到该元素?

java selenium selenium-webdriver click
2个回答
1
投票

尝试使用JavascriptExecutor单击元素,

参考代码,

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

0
投票

您可以使用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();

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

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