如何使Selenium Webdriver等待元素将其属性更改为Java中的其他内容

时间:2018-09-25 03:11:53

标签: java selenium selenium-webdriver webdriver selenium-chromedriver

以下是我的要素;

String sId = driver.findElement(By.xpath(path)).getAttribute("data-id");

由于现在属性值存储在“ sId”中,因此我现在需要告诉Selenium等待,直到data-id属性值与sID 不等于。 我没有运气尝试过下面的代码:

wait.until_not(ExpectedConditions.textToBePresentInElement(By.xpath(path), sId));

我得到了错误:

  

未定义方法until_not(ExpectedCondition)   键入WebDriverWait

即使我将“ until_not”更改为“ until”,我也会收到此警告:

  

类型中的方法textToBePresentInElement(By,String)   ExpectedConditions已弃用

我该怎么做?

3 个答案:

答案 0 :(得分:1)

如果您正在检查属性值,则检查文本将无济于事,这是两件事。

您可以为此组合notattributeToBe ExpectedConditions

wait.until(ExpectedConditions.not(ExpectedConditions.attributeToBe(By.xpath(path), "data-id", sId)));

答案 1 :(得分:0)

您可以尝试在预期条件下不使用,例如:

wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElement(<element>, <elementtext>)));

或者您也可以使用预期条件隐身方法:

wait.until(ExpectedConditions.invisibilityOfElementWithText(locator, text));

答案 2 :(得分:0)

您可以尝试以下代码

String sId = driver.findElement(By.xpath(path)).getAttribute("data-id");        

boolean expectedCondition = false;
boolean timeOut = false;
int second = 1;
do {
    try {
        //timeout for 60 seconds
        if(second>60) {
            timeOut = true;
        }
        String expectedId = driver.findElement(By.xpath(path)).getAttribute("data-id");
        if(! expectedId.equals(sId)) {
            expectedCondition=true;
        }else {
            second++;
        }
    } catch (Exception e) {
        TimeUnit.SECONDS.sleep(1);
        second++;
    }
}while(expectedCondition==false && timeOut==false);