JAVA/Selenium—单击页面上的第一个按钮可以在50%的时间内工作
我正在使用Selenium自动化web应用程序的一些UI单击。其中一个页面我有几个按钮,指向一些细节。它们都有相同的名字,但我可以点击其中一个,所以我只点击第一个。但是有时有效,有时无效JAVA/Selenium—单击页面上的第一个按钮可以在50%的时间内工作,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用Selenium自动化web应用程序的一些UI单击。其中一个页面我有几个按钮,指向一些细节。它们都有相同的名字,但我可以点击其中一个,所以我只点击第一个。但是有时有效,有时无效 WebElement DetailsButton = setPresentElementByXpath("//input[1][@type='button' and @value='Go to Details']"); DetailsButton.click(); 我正在使用setPresentElement
WebElement DetailsButton = setPresentElementByXpath("//input[1][@type='button' and @value='Go to Details']");
DetailsButton.click();
我正在使用setPresentElementByXpath动态地等待元素
private WebElement setPresentElementByXpath(String xpath) throws Exception {
WebElement myDynamicElement = (new WebDriverWait(driver, 15))
.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath)));
return myDynamicElement;
}
我做错了什么
编辑:我忘了提到它失败的地方。它通过
DetailsButton.click()代码>没有问题,但单击下一步失败,屏幕截图和日志显示,在单击按钮后应该显示的页面不在那里,因此我假设按钮没有单击。页面加载速度变化和缓存可能是问题所在。如果发生元素“未找到”异常,请使用,使其可通过(通过)单击
如果出现“另一个元素将收到单击”的异常,您可以直接使用。注意:JS操作没有返回值(无论是否有效),并且不会像Selenium.click()那样等待页面加载(如果在单击之后发生)
您是否尝试过使用ExpectedConditions.visibilityOfElement(WebElement)
而不是presence?它可能试图在按钮在页面上可见但在DOM中出现之前单击该按钮。还有,为什么要使用XPath?XPath是非常脆弱的,我敢肯定它不能帮助解决这些问题。如果可能的话,使用CSS选择器。元素的可见性也是如此。通常我使用ID,但如果我不能,我会尽我所能使用。通常是xpath,习惯的力量。尝试使用其他方式单击,如使用actions类或JavaScript Executor。您得到的异常是什么?我在应该单击的下一个元素上得到超时异常。这不是同步问题,因为我在这两个元素之间添加了一些固定的等待来检查,错误仍然发生。正如我提到的,元素被找到并且可见,Selenium认为它被单击了,因为它不会抛出任何错误。我得到了下一个元素的超时时间,因为它从未真正加载过。
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.elementToBeClickable(By.id("myDynamicElement")));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", element);