Как заставить веб-драйвер Selenium ждать, пока элемент изменит свой атрибут на что-то другое в Java - PullRequest
0 голосов
/ 25 сентября 2018

Ниже находится мой элемент;

String sId = driver.findElement(By.xpath(path)).getAttribute("data-id");

Поскольку теперь значение атрибута хранится в «sId», теперь мне нужно сказать Selenium ждать, пока значение атрибута data-id не станет равным НЕ равно до sID.Я попробовал приведенный ниже код безуспешно:

wait.until_not(ExpectedConditions.textToBePresentInElement(By.xpath(path), sId));

Я получаю сообщение об ошибке:

Метод till_not (ExpectedCondition) не определен для типа WebDriverWait

Кроме того, даже если я изменю «пока_от» на «до», я получаю это предупреждение:

Метод textToBePresentInElement (By, String) из типа ExpectedConditions устарел

Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Вы можете попробовать приведенный ниже код

String sId = driver.findElement(By.xpath(path)).getAttribute("data-id");        

boolean expectedCondition = false;
boolean timeOut = false;
int second = 1;
do {
    try {
        //timeout for 60 seconds
        if(second>60) {
            timeOut = true;
        }
        String expectedId = driver.findElement(By.xpath(path)).getAttribute("data-id");
        if(! expectedId.equals(sId)) {
            expectedCondition=true;
        }else {
            second++;
        }
    } catch (Exception e) {
        TimeUnit.SECONDS.sleep(1);
        second++;
    }
}while(expectedCondition==false && timeOut==false);
0 голосов
/ 25 сентября 2018

Если вы проверяете значение атрибута, проверка текста вам не поможет, это две разные вещи.

Вы можете комбинировать not и attributeToBe ExpectedConditions длячто

wait.until(ExpectedConditions.not(ExpectedConditions.attributeToBe(By.xpath(path), "data-id", sId)));
0 голосов
/ 25 сентября 2018

Можно попробовать использовать не из Ожидаемых условий, например:

wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElement(<element>, <elementtext>)));

Или также можно использовать метод невидимых ожидаемых условий:

wait.until(ExpectedConditions.invisibilityOfElementWithText(locator, text));
...