Как не потерпеть неудачу на wait.until (ожидаемое состояние) - PullRequest
2 голосов
/ 21 января 2020

У меня есть таблица, которая может отображаться или не отображаться на основе URL. Теперь мой тест проходит по всем заданным URL-адресам. Я должен нажать на кнопку поиска, после чего я проверяю существование таблицы. Мой стол изначально не работал, хотя стол был хорошо виден. Я добавил следующий код для решения этой проблемы:

WebDriverWait wait = new WebDriverWait(data.Driver,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("abc")));
Boolean tableVisibility = data.Driver.findElements(By.id("12345abcd")).size() > 0;
if (tableVisibility == true) {
    result.logInfo("table displaying successfully");
}
Boolean isElmPresent =  data.Driver.findElements(By.id("labelMessage")).size() > 0;
if (isPresent == true) {
    this.updateDBTbl(abc,xyz);
}

Это утверждение помогло мне решить проблему с загрузкой таблицы. Но сейчас я сталкиваюсь с проблемой, когда таблица не может быть найдена. На самом деле, когда таблица не найдена, мы получаем новую метку с надписью «нам нужно связаться с системной стойкой», о которой я должен сообщить в своей базе данных. Но в случае оператора wait.until, когда он не видит таблицу через 30 секунд, он выдает ошибку и останавливает выполнение. из-за этого ярлык никогда не проверяется. Я прокомментировал оператор wait.until на данный момент и вместо этого добавил Thread.Sleep, который решил эту проблему, но я вовсе не фанат жесткого ожидания. Поэтому мне интересно, есть ли лучший способ справиться с этой проблемой.

Ответы [ 3 ]

0 голосов
/ 22 января 2020

Ваш лог c поток нужно немного отрегулировать. Вам необходимо:

  1. Дождаться, пока появится таблица
    1. Если присутствует, зарегистрировать успех
    2. Если нет, зарегистрировать ошибку и сообщение метки журнала

// not sure what this does
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("abc")));

// is table present?
try
{
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("12345abcd")));
    result.logInfo("table displaying successfully");
}
catch (TimeoutException e)
{
    // table is not present
    result.logInfo("table NOT displaying successfully");

    // report contact system desk message
    if (data.Driver.findElements(By.id("labelMessage")).size() > 0)
    {
        this.updateDBTbl(abc,xyz);
    }
}
0 голосов
/ 22 января 2020

вот решения, которые вы можете попробовать: 1. проверить, является ли элемент видимым или нет - если он видим, выполните свои действия с ним, если нет - то выполните действия с другим элементом, который должен отображаться, если таблица отсутствует 2. добавить исключение игнорирования к вашему ожиданию 3. обернуть блок try / catch для обработки отсутствия таблицы

0 голосов
/ 22 января 2020

Попробуйте:

try{
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("abc")));
 Boolean tableVisibility = data.Driver.findElements(By.id("12345abcd")).size() > 0;
                if (tableVisibility==true) {
                    result.logInfo("table displaying successfully");
                }
Boolean isElmPresent=  data.Driver.findElements(By.id("labelMessage")).size() > 0;
                if (isPresent == true) {
                    this.updateDBTbl(abc,xyz);
                }
}catch(ElementNotVisibleException e){
    e.printStackTrace();
}

Это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...