我正在使用Selenium自动为网络应用点击某些用户界面。其中一个页面我有几个按钮导致一些细节。它们都有相同的名称,但我可以点击其中任何一个,所以我只需点击第一个。但是......有时候它会起作用,有时它也不会。
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();
没有问题,但是然后点击下一步就失败了,屏幕截图和日志说点击按钮后应该显示的页面不在那里,所以我假设没有点击按钮。
答案 0 :(得分:0)
页面加载速度变化和缓存可能是问题所在。如果发现元素未发现异常,请使用Explicit Wait通过ExpectedConditions.ElementToBeClickable(按)点击它。
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.elementToBeClickable(By.id("myDynamicElement")));
如果发生“另一个元素会收到点击”的异常,您可以直接点击该元素JavaScriptExecutor。注意:JS操作没有返回值(如果它工作与否)并且如果在点击之后发生了一个页面加载,则不会等待,例如Selenium .click()。
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", element);