硒:等待直到属性值更改

时间:2018-08-29 04:49:55

标签: selenium testing automation

我的网页中的图片在一段时间后更改了src,更改src后可能有两个可能的值(时间可能会有所不同) img_src_success或img_src_failed

我添加了以下代码,等待src更改但它无法正常工作并给出错误。

 WebDriverWait wait = new WebDriverWait(driver, 120);
 wait.until(ExpectedConditions.attributeToBe(image_src, "src",img_src_success );  

其中image_src = WebElement
src =属性
img_src_success =字符串值“ /src/image/success.png” img_src_running =“ /src/image/failed.png”“的字符串值”

以上代码给出错误

  

org.openqa.selenium.StaleElementReferenceException:过时的元素   reference:元素未附加到页面文档。

请提出我做错了什么或其他任何方式。

1 个答案:

答案 0 :(得分:0)

当元素从DOM中删除或分离时,将抛出

s_input = "A%05d" % 231 # 'A00231' number = s_input[1:] # '00231' input_id = int(number) # 231 。再次执行StaleElementException可能会解决此问题。 findElement有一个变体,它接受一个ExpectedConditions.attributeToBe定位符。使用该方法可以确保每次进行检查之前都可以检索该元素,并且可以解决问题。

您可以将By与自己的wait.until一起使用,该ExpectedCondition可以每次获取元素并检查StaleElementReferenceException。如下所示:

    wait.until(new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver input) {
            try {
                WebElement deployed_row = Report_id
                        .findElement(By.xpath("//div[(@class = 'gridxRow') and (@rowindex = '0')]"));
                WebElement table = deployed_row.findElement(By.className("gridxRowTable"));
                WebElement image_src = table.findElement(By.xpath("//tbody/tr/td[2]/div/div/span/img"));
                return image_src.getAttribute("src").equals(img_src_success);
            } catch (StaleElementReferenceException e) {
                return false;
            }
        }
    });