2013-11-14 3 views
1

Я использую Webdriver в Java, и мне нужно дождаться элемента, который имеет динамический идентификатор, который будет отображаться на веб-странице.Webdriver неявный ожидание динамического идентификатора

Например, у меня есть следующий оператор для неявного ожидания: 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)) 

не работает.

Большое спасибо за внимание.

ответ

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')]"))); 
0

Вы можете использовать частичное совпадение для id, но вы должны использовать либо селектор xpath, либо css.

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

Адрес tag является тегом этого элемента.

Смежные вопросы