0

问题- 按钮、文本框和选项卡等一些 web 元素有时会被识别并突然停止被识别

org.openqa.selenium.StaleElementReferenceException:在缓存中找不到元素 - 页面可能在查找后已更改 命令持续时间或超时:33.03 秒

点击按钮的代码:

Actions actions1 = new Actions(driver);
System.out.println("boolean value of Confirm order is"+driver.findElement(By.id("confirmOrder")).isDisplayed()); ---> Returning True always
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='confirmOrder']")));
System.out.println("Is the Generate order button visible-"+element.isDisplayed());       System.out.println("Is the Generate order button enabled-"+element.isEnabled());
actions1.moveToElement(element);
actions1.click();
actions1.perform();

该按钮isDisplayed()始终返回 true,但它被点击了 3 次中的 1 次。这发生在所有其他元素上,例如选项卡或文本框。使用 Firefox 24(代码在 v25 上运行最差)

关于出了什么问题以及为什么元素有时会被识别但不是一直被识别的任何想法?

4

2 回答 2

1

StaleElementReferenceException表示它指向一个元素,但它已更改(替换为相似/相同的元素,或一起删除)。

如果您的页面经常有活动的 JQuery,那么除了祈祷最好之外,您无能为力。

但是,如果它只是使用 JQuery 加载页面(并且尚未完成),则一旦 JQuery 完成,以下将返回 true:

(Boolean)((JavascriptExecutor)driver).executeScript("return jQuery.active == 0");

(我相信上面的语法是正确的。我已经抽象了我的代码,所以所有的命令可能都不完全正确)

于 2013-11-03T04:00:18.983 回答
0

您可以在单击任何特定按钮选项卡链接之前使用预期条件 和传递控制

         WebDriverWait wait = new WebDriverWait(driver, 18);
         wait.until(ExpectedConditions.elementToBeClickable(By.id("confirmOrder")));
         WebElement element = driver.findElement(By.id("confirmOrder"));
            element.sendKeys(org.openqa.selenium.Keys.CONTROL);
            element.click();

或者您可以尝试使用 wait.until(ExpectedConditions.presenceOfElementLocated(By.id("confirmOrder")));

于 2013-11-06T06:28:26.843 回答