找到java selenium元素,但单击一次无效
我有一段selenium代码来查找某个元素,然后单击同一个元素。元素被找到了,但在那之后,单击似乎没有起到作用。下面是查找元素的代码(不幸的是使用XPath,因为没有id,并且它使用了很多自制的方法): 我使用上面的字符串xpathButton将WebElement存储在变量中,然后将WebElement传递给另一个类中的方法: searchForElementByXpathWithoutSwitchToFrame将查找元素并验证是否找到它找到java selenium元素,但单击一次无效,java,selenium,selenium-webdriver,click,Java,Selenium,Selenium Webdriver,Click,我有一段selenium代码来查找某个元素,然后单击同一个元素。元素被找到了,但在那之后,单击似乎没有起到作用。下面是查找元素的代码(不幸的是使用XPath,因为没有id,并且它使用了很多自制的方法): 我使用上面的字符串xpathButton将WebElement存储在变量中,然后将WebElement传递给另一个类中的方法: searchForElementByXpathWithoutSwitchToFrame将查找元素并验证是否找到它 WebElement startTaakButton
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()。
似乎找到了该元素,因为它没有给出NoTouchElementException
,我看到焦点在要单击的元素上,但什么也没有发生:
当我取消对Thread.sleep的注释时,它会工作,但我不想使用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();
正如您在下面加载图像的图像中所看到的,在找到并单击元素后,页面似乎再次(重新)加载。这就是线程.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();
希望这对你有用,就像对我有用一样 如果您使用的是chrome驱动程序2.34或2.35,则在切换到帧后驱动程序会出现错误。对于最新的chrome驱动程序,您需要让thread.sleep保持几秒钟。你会在这里得到更多信息,谢谢,但我有一个2.33版本的chromedriver。不过,谢谢你提醒我不要突然更新我的ChromedRiver谢谢你,AMIT GURBANI。这帮助我解决了我的问题。起初我不知道“参数[0].click();”是什么意思(JavaScript技能差),但现在我知道了。