Как получить текстовое содержимое скрытого элемента с изменяющимися значениями - PullRequest
0 голосов
/ 06 июня 2019

Здесь элемент, который я хочу проверить на

        <div id="console-modal" class="tab-item hide-item green-outline">
          <p id="message-box"></p>
          <button id="console-modal-button" class="white-button btn-md">close</button>
        </div>

когда происходит какое-либо действие, я добавляю сообщение к <p> и настраиваю отображение <div> для блокировки. В моем тесте с селеном я ожидаю получить сообщение, которое присутствует в обновленном элементе <p>. Но он возвращает пустую строку.

Это код, который выполняет действие по обновлению <p> элемента

  it('should fill the login form and submit', () => {
    driver.findElement(By.id('username')).sendKeys('johnd');
    driver.findElement(By.id('passwd')).sendKeys('12345');
    return driver.findElement(By.id('inline-signin-button')).click();
  });

Это тест, который я выполняю, чтобы проверить содержание #message-box. Вместо innerHTML я тоже попробовал textContent. Кроме того, когда я добавляю некоторый текст в элемент <p>, тест может получить содержимое, но не получает обновленное содержимое после завершения действия и отображения поля.

it('should find the auth error modal and close', () => {
   driver.wait(until.elementLocated(By.id('console-modal')));
   driver.findElement(By.id('message-box')).isDisplayed();
   return expect(driver.findElement(By.id('message-box')).getAttribute('innerHTML')).to.eventually.equal('authentication fail! check your username and password')
driver.findElement(By.id('console-modal-button')).click();
 });

Я ожидаю, что возвращаемое значение будет обновленным содержимым элемента <p>, но, похоже, оно сохраняет содержимое с того момента, когда элемент все еще скрыт. Есть ли способ, которым я мог бы получить обновленный текстовый контент, когда его элемент отображается. Или есть способ, которым я мог бы отложить выполнение до отображения элемента перед его проверкой.

1 Ответ

1 голос
/ 06 июня 2019

Вы можете использовать ниже подождите, пока.

var pElement = driver.wait(until.elementLocated(By.xpath("//div[@id='console-modal'][not(contains(@class,'hide-'))]/p[@id='message-box']")));

мы ждем, пока имя класса div не будет иметь hide, чтобы убедиться, что блок отображается (что обеспечит обновление текста p)

...