Web元素无法随机识别

时间:2013-11-03 03:53:07

标签: selenium selenium-webdriver

问题 - 有时会识别出某些元素,例如按钮,文本框和标签,并突然停止突然识别

  

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上工作最差)

对于出了什么问题以及为什么这些元素在某个时间得到认可而不是所有时间都有任何想法?

2 个答案:

答案 0 :(得分:1)

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

如果您的网页一直有活跃的JQuery,那么除了祈祷之外,您可以做的事情并不多。

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

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

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

答案 1 :(得分: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”)));