一尘不染

WebDriverWait更改元素属性

selenium

如何使用WebDriverWait等待属性更改?

在我的AUT中,我必须等待按钮被启用后才能继续,但是不幸的是,由于开发人员对页面进行编码的方式,我无法使用WebElement的isEnabled()方法。开发人员正在使用一些CSS来使按钮看起来像已禁用,因此用户无法单击它,并且isEnabled方法始终为我返回true。因此,我要做的就是获取属性“
aria-disabled”,并检查文本是“ true”还是“ false”。到目前为止,我一直在做Thread.sleep的for循环,如下所示:

for(int i=0; i<6; ++i){
    WebElement button = driver.findElement(By.xpath("xpath"));
    String enabled = button.getText()
    if(enabled.equals("true")){ break; }
    Thread.sleep(10000);
 }

(如果不正确,请忽略上面的代码,只是我正在做的伪代码)

我敢肯定,有一种方法可以使用WebDriverWait达到类似的效果,这是我无法弄清楚的首选方法。这是我试图实现的目标,即使以下操作无效:

WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOf(refresh.getText() == "true"));

显然,这是行不通的,因为该函数期望的是WebElement而不是String,但这是我要评估的东西。有任何想法吗?


阅读 460

收藏
2020-06-26

共1个答案

一尘不染

以下内容可能会帮助您满足要求。在下面的代码中,我们将覆盖包含我们要查找的条件的apply方法。因此,只要条件不成立(在我们的情况下,启用条件不成立),我们就会循环最多10秒,每500毫秒轮询一次(这是默认设置),直到apply方法返回true为止。

WebDriverWait wait = new WebDriverWait(driver,10);

wait.until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver driver) {
        WebElement button = driver.findElement(By.xpath("xpath"));
        String enabled = button.getAttribute("aria-disabled");
        if(enabled.equals("true")) 
            return true;
        else
            return false;
    }
});
2020-06-26