Не удалось запустить тест Selenium-cucumber.js при добавлении BeforeScenario в файл hooks.js - PullRequest
0 голосов
/ 20 ноября 2018

Каркас с использованием: Селен-огурец-JS .Я пытаюсь выполнить приведенный ниже тест селена-огурца-js.Я хотел бы запустить функцию loginApp() как BeforeScenario, записанную в файле hooks.js.Но во время выполнения теста его бросок ниже ошибки в данный момент.Может ли кто-нибудь посоветовать, пожалуйста, как решить проблему.

`C:\Tests\cucumber\node_modules\cucumber\lib\cucumber\runtime\event_broadcaster.js:30 process.nextTick(function(){ throw error; }); // prevent swallow by unhandled rejection                                        
TypeError: node_modules\cucumber\lib\cucumber\support_code\library.js:17 scenario.loginApp is not a function
    at C:\Tests\cucumber\step-definitions\hooks.js:4:51
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:390:7)
    at startup (bootstrap_node.js:150:9)`

/**/Feature:**

//cucumber/features

Функция: Войдите в систему и найдите вкладку Регистрация

 Scenario: Check the register tab in application
    When After login look for "Register" in navbar


//**lookfortab.js**

//cucumber/step-definitions

    const expect = require('chai').expect;
    module.exports = function() {
        this.When(/^After login look for "([^"]*)" in navbar$/, function (registerText) {
        let navText = By.css('div#nav>div>ul>li>a');
        driver.wait(until.elementLocated(navText, 10000));
        return driver.findElement(navText).getText().then(el => {                   
           console.log("print text here:"+el);     
           const displayTxt = el;  
           expect(displayTxt).to.be.eql(registerText);                  
            });     

        })

    }

//login.js

//cucumber/page-objects


    module.exports = {  
        loginApp(){
          this.driver.helpers.loadPage('https://testingsite.com')     
          this.driver.findElement(by.id('HomeLogin_Username')).sendKeys("Tester");
          this.driver.findElement(by.id('HomeLogin_Password')).sendKeys("SomePassword123");     
          let lgBtn = By.css('div#login-fields>div>button');
          this.driver.findElement(lgBtn).click();    
        }   

    };

//hooks.js

//cucumber/step-definitions


    module.exports = function () {
        this.BeforeScenario(function(scenario, done) {
            console.log('BeforeScenario: ' + scenario.loginApp());
            done();
        });

    };

1 Ответ

0 голосов
/ 22 ноября 2018

Прежде всего, обратите внимание, что selenium-cucumber-js использует довольно старую версию cucumber-js (1.3.3 против 5.0.2 на момент написания этой статьи).Имейте это в виду, когда вы консультируетесь с cucumber-js документами или ищете примеры.Ниже я буду публиковать ссылки на документы cucumber-js@1.3.3.

Что касается того, что не работает в вашем наборе:

  1. scenario объект, который передается в ваши хуки, не имеет прикрепленных объектов страницы.Он содержит только метаинформацию о сценарии и методах его получения.Вот их список: cucumber-js docs
  2. Если вы хотите ссылаться на объекты страницы из ваших хуков, вы можете использовать глобальный page, как описано здесь: Страницаobjects - selenium-cucumber-js
  3. Ваша функция loginApp(), вероятно, все еще не будет работать, поскольку вы обращаетесь к веб-драйверу как this.driver, а помощники как this.driver.helpers.Они также глобально определены как selenium-cucumber-js: Помощники

Итак, ваш hooks.js должен выглядеть следующим образом:

module.exports = function () {
  this.BeforeScenario(function(scenario, done) {
    console.log('BeforeScenario: ' + page.login.loginApp());
    done();
  });

};

И ваш login.js:

module.exports = {
  loginApp(){
    helpers.loadPage('https://example.com')
    driver.findElement(by.id('HomeLogin_Username')).sendKeys("Tester");
    driver.findElement(by.id('HomeLogin_Password')).sendKeys("SomePassword123");
    let lgBtn = By.css('div#login-fields>div>button');
    driver.findElement(lgBtn).click();
  }

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