【问题标题】:Webdriver implicit wait for a dynamic IDWebdriver 隐式等待动态 ID
【发布时间】:2013-11-26 22:41:21
【问题描述】:

我在 Java 中使用 Webdriver,我需要等待具有动态 ID 的元素显示在网页上。

例如,对于隐式等待,我有以下语句: WebDriverWait 等待 = 新的 WebDriverWait(驱动程序, 30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dynamicID")))

dynamicID 是我正在等待的元素 ID 的前缀,通常它带有一个我无法预测的数字。

这里有一些很好的答案Finding an element by partial id with Selenium in C#

我试图将我的代码更改为

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(^="dynamicID")))

它不工作。

我尝试使用页面工厂:

@FindBy(id ^= "dynamicID")
private WebElement something;

它也不起作用。

所以我有问题: 1. 如何在我的隐式等待语句中使用 ID 部分匹配? 2.如果我正在使用页面工厂,并假设@FindBy 正在工作,我如何在隐式等待中使用这个元素something

wait.until(ExpectedConditions.visibilityOfElementLocated(something)) 

不工作。

非常感谢。

【问题讨论】:

    标签: java webdriver selenium-webdriver


    【解决方案1】:

    您可以使用 By.xpath,并使用 xpath starts-with 函数,如下所示:

    wait.until(ExpectedConditions.visibilityOfElementLocated(
        By.xpath("//*[starts-with(@id, 'dynamicID')]")));
    

    * 是代表任何元素类型的通配符。如果您知道标签,则可以替换它。例如,如果它是一个 div:

    wait.until(ExpectedConditions.visibilityOfElementLocated(
        By.xpath("//div[starts-with(@id, 'dynamicID')]")));
    

    【讨论】:

      【解决方案2】:

      您可以对id 使用部分匹配,但您必须使用xpathcss 选择器。

      wait.until(ExpectedConditions.visibilityOfElementLocated(By.CssSelector("tag[id^='dynamicID']")))
      

      tag 是元素的标签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 2017-04-19
        • 2012-05-11
        • 2013-12-10
        • 2012-06-17
        相关资源
        最近更新 更多