Элемент WebDriver возвращает false для isVisible/waitForForVisible

Я работаю над своим первым набором тестов Cucumber в приложении Meteor, но не могу заставить работать шаг входа в систему. В моем приложении используется настраиваемый плагин входа в систему, который я написал специально для этого проекта. Вот шаг, который я сейчас определил с выводом отладки:

this.Given(/^I am logged in as a\/an "([^"]*)"$/, function(roleName, callback) {
  this.browser
    .url(url.resolve(process.env.HOST, '/'))
    .waitForExist('#appSignIn');
  this.browser.getHTML('#appSignIn', function(err, html) {
    if (err) {
      console.log('err: ', err);
    } else {
      console.log('link HTML: ', html);
    }
  });
  this.browser.getCssProperty('#appSignIn', 'display', function(err, value) {
    console.log('link HTML display: ', value);
  });
  browser.isVisible('#appSignIn', function(err, isVisible) {
      console.log('#appSignIn', isVisible);
  });
  this.browser
    .waitForVisible('#appSignIn')
    .click('#appSignIn')
    .waitForExist('#username')
    .waitForVisible('#username')
    .setValue('#username', 'test' + roleName)
    .setValue('#password', 'test' + roleName)
    .leftClick('#signin')
    .waitForExist('#appSignOut')
    .waitForVisible('#appSignOut')
    .call(callback);
});

Что я вижу в этих журналах, так это:

 Scenario:                               # features/my.feature:11
    Given The server data has been reset  # features/my.feature:12
link HTML:  <a id="appSignIn" href="/signin">Sign In</a>
link HTML display:  { property: 'display',
  value: 'block',
  parsed: { type: 'ident', string: 'block' } }
#appSignIn false
    And I am logged in as a/an "ADMIN"    # features/my.feature:13
      RuntimeError: RuntimeError
           (ScriptTimeout:28) A script did not complete before its timeout expired.
           Problem: Timed out waiting for asyncrhonous script result after 511 ms

По сути, я вижу вывод HTML, поэтому знаю, что элемент есть. Я вижу, что для CSS установлено значение display: block, но затем WebDriver сообщает, что элемент не виден с помощью isVisible, и аналогичным образом истекает время ожидания с вызовом waitForVisible. ссылка «Войти» является частью сворачиваемой панели навигации Bootstrap, расположенной в правом верхнем углу.


person CodeChimp    schedule 26.04.2015    source источник
comment
Пара вещей, которые можно попробовать, которые могут помочь. Тем не менее, добавьте паузу, скажем, на 3 секунды, чтобы убедиться, что это не проблема ожидания (не похоже на это), а также попробуйте сохранить снимок экрана, поскольку это иногда помогает. Если область обрезается представлением, она не будет видна, но будет работать в исходном коде HTML/css.   -  person Xolv.io    schedule 26.04.2015
comment
2 вопроса: 1. Как вы начинаете свои тесты? 2. откуда вы берете this.browser?   -  person Gobliins    schedule 27.09.2017
comment
Хех, это было более 2 лет назад... Я даже не уверен, над каким проектом я работал в то время, TBH. Кроме того, по внешнему виду я понял, что проблема была в размере браузера.   -  person CodeChimp    schedule 29.09.2017


Ответы (1)


Проблема была проста: размер области просмотра по умолчанию был слишком мал, что приводило к сворачиванию элемента навигации Bootstrap. Я установил размер браузера на 1000x600, и он работал, как и ожидалось.

person CodeChimp    schedule 26.04.2015