JAVA / Selenium - 单击页面上的第一个按钮可以在50%的时间内

时间:2017-06-09 14:48:34

标签: java selenium selenium-webdriver

我正在使用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();没有问题,但是然后点击下一步就失败了,屏幕截图和日志说点击按钮后应该显示的页面不在那里,所以我假设没有点击按钮。

1 个答案:

答案 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);