Webdriver隐式等待动态ID

时间:2013-11-14 03:17:21

标签: java webdriver selenium-webdriver

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

例如,我有隐式等待的以下语句:     WebDriverWait wait = new WebDriverWait(driver,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)) 

不起作用。

非常感谢。

2 个答案:

答案 0 :(得分:1)

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

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

*是表示任何元素类型的wild字符。如果您知道标签,则可以替换它。例如,如果它是div:

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

答案 1 :(得分:0)

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

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

tag是元素的标记。