当前位置: 首页 > 面试题库 >

WebDriverWait更改元素属性

步胜
2023-03-14
问题内容

如何使用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,但这是我要评估的东西。有任何想法吗?


问题答案:

以下内容可能会帮助您满足要求。在下面的代码中,我们将覆盖包含我们要查找的条件的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;
    }
});


 类似资料:
  • 如何使用WebDriverWait等到属性更改? 在我的AUT中,我必须等待一个按钮被启用后才能继续,不幸的是,由于开发人员编码页面的方式,我不能使用WebElement的isEnabled()方法。开发人员正在使用一些CSS来使按钮看起来像是被禁用的,这样用户就不能点击它,并且方法isEnabled对我来说总是返回true。所以我要做的就是获得属性“aria-disabiled”,检查文本是“t

  • 我有一个名为的简单函数: 我想知道除了这个以外,是否还有其他方法可以添加某些属性的值:等于,等于等。 我试过这样的方法: 但那行不通。我知道尝试它可能是愚蠢的(因为我的IDE说这个表达式不能分配给类型HTML元素^^')。

  • 问题内容: 我丢失了凭据..所以我正在创建这个新线程。 我想更改此行: 对此: 因此,投票设置为。 但是问题在于,在该站点中,有几个项目需要投票,并且元素“数据水龙头”发生了变化。如果我使用此脚本: 但是它不显示任何内容,因为第一个属性值具有另一个数字。如何用输入的元素个数选择行,所以可以替换为? 我只能做这种selenium吗?有没有不使用真正的浏览器的另一种方法? 无论如何,这是网页的结构:

  • 问题内容: 我有一个div的特定样式表。现在我想使用js动态修改div的一个属性。 我该怎么做? 它是否正确? 问题答案: 几乎是正确的。 由于是JavaScript操作符,因此您实际上不能在属性名称中使用它。如果您正在设置,或者类似的单字,您的代码就可以正常工作。 但是,对于任何带连字符的属性名称,您都需要记住的是,在javascript中,您删除了连字符,并使下一个字母变为大写,因此应为。 还

  • 问题内容: 我想动态更新元素的文本: 我是jQuery的新手,因此对我来说,这项任务似乎非常具有挑战性。有人可以指出我要使用的功能/选择器吗? 如果可能的话,我想在不为需要更改的文本添加新容器的情况下执行此操作。 问题答案: 在Javascript中,该属性为您提供元素的所有子节点,包括文本节点。 因此,如果您知道要更改的文本始终是元素中的第一件事,那么请给出以下HTML: 您可以这样做: 当然,

  • 问题内容: 我具有以下功能,当触发该功能时,DIV将变为半透明。 但是,我希望此功能可同时应用于多个DIV。我尝试为每个DIV赋予相同的类名,然后使用,但不知道如何实现它。 会更合适,如果可以的话,我将如何实施呢? 问题答案: 我将使用querySelectorAll选择它们并在它们上循环。 编辑:正如上面的评论所述,如果这些值不是动态的并且使用,则最好将这些值放在类中: