Ожидание Selenium для ExpectedConditions.attributeToBe не работает должным образом
Я пытаюсь сделать wait.until для атрибута элемента следующим образом...
public static void WaitForElementSize(WebElement element, WebDriver driver, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
System.out.print(element.getAttribute("style"));
WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.attributeToBe(element, "style", "top: 0px;"));
}
}
Из строки печати я знаю, что атрибут соответствует ожидаемому, то есть "top: 0px;" но когда я перебираю код в wait.until, элемент в пользовательском интерфейсе "щелкается" и меняется на закрытый (в этом случае стиль меняется на "top: 120px;"). Затем метод начинается с самого начала, а затем завершается сбоем, потому что теперь это неправильно.
Любая помощь с тем, почему метод перезапускается и изменяет значение, будет принята с благодарностью.
Я также пытался...
wait.until(e -> element.getAttribute("style") == "top: 0px;");
Но это не удается по другим причинам, следовательно, пытается альтернативы.
1 ответ
atributetobe выполнит метод equals string, поэтому, если в стиле есть что-то еще, он потерпит неудачу, попробуйте с атрибутом содержит:
wait.until(ExpectedConditions.attributeContains(element, "style", "top: 0px;"));
Это не будет работать:
wait.until(e -> element.getAttribute("style") == "top: 0px;");
вам нужно использовать:
element.getAttribute("style").equals("top: 0px;)
сравнить строки
Расположение элемента By.id("my-element-id")
не имеет проблем.
wait.until(
ExpectedConditions.attributeToBe(By.id("my-element-id"),
"atrributeNameString",
"attributeValueString" )
);`