Сбой теста только в безголовом хроме

У меня есть несколько интеграционных тестов с использованием wdio, все они проходят. Однако, когда я запускаю их в безголовом хроме, один из этих тестов терпит неудачу. Я получаю эту ошибку:

1) Reset password by submitting a new password "before all" hook:

element ("#identifierNext") still not existing after 15000ms

Проблема в этой строке кода:

browser.waitForExist('#identifierNext');

Что странно, потому что я использую waitForExist(<element id>) и в других тестах, и они проходят даже в безголовом хроме. Я также пытался увеличить лимит waitFor до 30000 мс, но все равно не получается.

Это моя конфигурация wdio:

exports.config = {
    specs: [
        './test/pageobjects/**/reset_password.spec.js'
    ],
    maxInstances: 1,
    capabilities: [{
        maxInstances: 1,
        browserName: 'chrome',
        'goog:chromeOptions': {
            args: ['--headless', '--disable-gpu', '--window-size=1280,800', '--no-sandbox', '--disable-dev-shm-usage']
        }
    }],
    sync: true,
    logLevel: 'silent',
    coloredLogs: true,
    deprecationWarnings: true,
    bail: 0,
    screenshotPath: './errorShots/',
    baseUrl: 'http://127.0.0.1:3000',
    waitforTimeout: 10000,
    connectionRetryTimeout: 90000,
    connectionRetryCount: 3,
    services: ['selenium-standalone'],
    framework: 'mocha',
    reporters: ['spec'],
    mochaOpts: {
        ui: 'bdd',
        timeout: 30000
    },
}

Когда я удаляю headless из chromeOptions, этот тест проходит нормально. Любые идеи, почему это происходит?

РЕДАКТИРОВАТЬ: это мой файл reset_password.spec.js:

describe ('Reset password by submitting a new password', function(){
  //test fails in this before function
  before(function(){
    browser.url(ResetPassword.token_url(valid_email, email_password));
  });

  it ('Password reset without passwords', function(){
    .
    .
    .
  })

});

И мой файл reset_password.page.js:

const Page = require('./page');

class ResetPassword extends Page {

  get email() {
    return $('input[type="text"]');
  }

  get url() {
    return browser.getUrl();
  }

  open() {
    super.open('/reset-password');
  }

  get signIn(){
    browser.waitForExist('*=Sign in');
    return $('*=Sign in');
  }

  get enterEmail(){
    browser.waitForExist('input[type="email"]');
    return $('input[type="email"]');
  }

  get submitEmail(){
    //this fails in headless mode
    browser.waitForExist('#identifierNext');
    return $('#identifierNext');
  }

  get enterPassword(){
    browser.waitForExist('#password > div.aCsJod.oJeWuf > div > div.Xb9hP > input');
    return $('#password > div.aCsJod.oJeWuf > div > div.Xb9hP > input');
  }

  get submitPassword(){
    browser.waitForExist('#passwordNext');
    return $('#passwordNext');
  }

  get tokenEmail(){
    browser.waitForExist('span[email="[email protected]"]');
    return $$('span[email="[email protected]"]');
  }

  get tokenURL(){
    browser.waitForExist('a[id*=reset_link]');
    const links = $$('a[id*=reset_link]');
    return links[links.length-1].getAttribute('href');
  }

  token_url(email, password){
    browser.url('https://www.google.com/gmail/about/#');
    this.signIn.click();
    browser.switchTab(browser.getTabIds()[1]);
    this.enterEmail.setValue(email);
    this.submitEmail.click();
    this.enterPassword.setValue(password);
    this.submitPassword.click();
    this.tokenEmail[1].click();
    browser.pause(3000);
    return this.tokenURL;
  }

}

module.exports = ResetPassword;

person P. Paul    schedule 20.08.2019    source источник
comment
Пройдите сюда весь reset_password.spec.js здесь, пожалуйста.   -  person pawelbylina    schedule 20.08.2019


Ответы (1)


Я нашел проблему. Gmail отображается по-разному в разных браузерах. Я сделал снимок экрана с помощью browser.saveScreenshot('screenshot.jpg'); непосредственно перед тем, как тест не прошел, и он показывает, что страница выглядела по-другому (была на моем родном языке, а не на английском, и имела другой внешний вид и кнопки). Так вот почему тест не смог найти кнопку с данным идентификатором.

person P. Paul    schedule 20.08.2019