WedX - журнал о программировании и компьютерных науках

Как утверждать текстовые изменения элемента с помощью WebDriver, используя объекты страницы?

как-то я застрял в этой теме. У меня есть класс объекта страницы, например:

By job = By.xpath("//input[@id='job0']");

public Page triggerJob() {
    wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
    return this;
}

При нажатии кнопки вместо этого отображается текст, например «успех». Теперь я хочу утверждать, что этот текст отображается в тестовом методе, а не в объекте страницы:

public void testTriggerJob() {

    driver.get(url);

    Page = new Page(driver);

    Page.triggerJob();

}

Как мне это сделать? Я пробовал несколько подходов, но ни один из них не работал. Было бы здорово, если бы кто-нибудь подсказал мне - большое спасибо!

С наилучшими пожеланиями,

Даниэль


  • Что это за текст? Можете ли вы предоставить html текста? 22.02.2015
  • ‹td› ‹span id=de.xyz.jobs.Job_0› успешно запущен ‹/span› ‹/td› 22.02.2015

Ответы:


1

Вы можете попробовать одну вещь - в своем PO создайте локальную переменную и после ее выполнения нажмите, чтобы найти текст. А затем в вашем тестовом методе вызовите метод, который вернет вам этот текст для утверждения. Так что это может быть как-то...

private String strSuccessMsg = "";
By spnMessage = By.id("de.xyz.jobs.Job_0");
public Page jobTriggered() {
   wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
    try{
        strSuccessMsg = wait.until(ExpectedConditions.presenceOfElementLocated(spnMessage)).getText();
    }catch(TimeOutException toe){
        strSuccessMsg = "Message not found.";
    }
    return this;
}

И добавьте еще один метод для возврата сохраненной строки.

public String getMessage() {
    return strSuccessMsg.trim();
}

И затем в вашем тестовом методе вы можете выполнить:

driver.get(url);
Page = new Page(driver);
Page.triggerJob();
Assert.assertEquals(Page.getMessage(), "successfully triggered", Page.getMessage());
22.02.2015
  • Хороший ответ. именно то, что я хотел предложить 22.02.2015
  • Спасибо @Saifur, но это редкое предположение, что OP уже применил этот подход. Пункт, который я оставил, это подходы, с которыми он работал... лолз... 22.02.2015
  • Привет, большое спасибо. Я пробовал что-то подобное, но без тайм-аута. Проблема в том, что он просто не находит его: org.junit.ComparisonFailure: Message not found. Ожидается: успешно запущено. Фактическое: сообщение не найдено. 22.02.2015
  • @ daniel.lozynski, можете ли вы проверить, находится ли этот диапазон или td под фреймом / iframe или модальным окном? 22.02.2015

  • 2

    Наконец-то я его получил! Большое спасибо! Проблема заключалась в том, что элемент выглядел почти так же, но после нажатия кнопки он изменился с «//input» на «//span», чего я не видел. Поскольку я думал, что это один и тот же элемент, я использовал spnMessage в обоих случаях. Поняв, что он не нашел элемент, потому что запрос был выполнен до его появления. Теперь я использую Thread.sleep(1000), и это работает. Мне было интересно, почему это на самом деле не ждет, но эй ;-)

    public Page triggerJob() throws InterruptedException {
        wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
        Thread.sleep(1000);
        try{
            successMessage = wait.until(ExpectedConditions.presenceOfElementLocated(jobSuccessMessage)).getText();
    
        }catch(TimeoutException timeOutException){
            successMessage = "Message not found.";
        }
        return this;
    }
    
    22.02.2015
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]