Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找到java selenium元素,但单击一次无效_Java_Selenium_Selenium Webdriver_Click - Fatal编程技术网

找到java selenium元素,但单击一次无效

找到java selenium元素,但单击一次无效,java,selenium,selenium-webdriver,click,Java,Selenium,Selenium Webdriver,Click,我有一段selenium代码来查找某个元素,然后单击同一个元素。元素被找到了,但在那之后,单击似乎没有起到作用。下面是查找元素的代码(不幸的是使用XPath,因为没有id,并且它使用了很多自制的方法): 我使用上面的字符串xpathButton将WebElement存储在变量中,然后将WebElement传递给另一个类中的方法: searchForElementByXpathWithoutSwitchToFrame将查找元素并验证是否找到它 WebElement startTaakButton

我有一段selenium代码来查找某个元素,然后单击同一个元素。元素被找到了,但在那之后,单击似乎没有起到作用。下面是查找元素的代码(不幸的是使用XPath,因为没有id,并且它使用了很多自制的方法):

我使用上面的字符串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()。
似乎找到了该元素,因为它没有给出
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技能差),但现在我知道了。