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

时间:2018-02-28 06:24:56

标签: java selenium selenium-webdriver click

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

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

2 个答案:

答案 0 :(得分:1)

尝试使用JavascriptExecutor单击元素

参考代码,

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

答案 1 :(得分: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();

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