我在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))
不起作用。
非常感谢。
答案 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
使用部分匹配,但必须使用xpath
或css
选择器。
wait.until(ExpectedConditions.visibilityOfElementLocated(By.CssSelector("tag[id^='dynamicID']")))
tag
是元素的标记。