Ожидание 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" )
);`
Другие вопросы по тегам