我有一段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必须再次等待页面重新加载,尽管已经找到了元素?
答案 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();
希望这对你有用,因为它对我有用!