首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在BeforeScenario文件中添加hooks.js时,Selenium-cucumber.js测试失败。

当在BeforeScenario文件中添加hooks.js时,Selenium-cucumber.js测试失败。
EN

Stack Overflow用户
提问于 2018-11-20 00:23:11
回答 1查看 688关注 0票数 0

框架使用:selenium-cucumber-js.我正在尝试运行下面的selenium-黄瓜-js测试。我想以loginApp()文件中的BeforeScenario形式运行hooks.js函数。但是,在运行测试时,它在当前的错误之下抛出。有人能就如何解决这个问题提出建议吗?

代码语言:javascript
复制
`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

特性:登录并查找“注册”选项卡

代码语言:javascript
复制
 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();
        });

    };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-21 22:28:00

首先,请注意,selenium-cucumber-js使用的是一个相当旧的cucumber-js版本(在编写此版本时为1.3.3vs5.0.2)。在查阅cucumber-js文档或寻找示例时,请记住这一点。下面,我将发布到cucumber-js@1.3.3文档的链接。

至于在你的环境中不起作用的是什么:

  1. 传递到钩子中的scenario对象没有附加页面对象。它只包含一些关于场景的元信息和获取它的方法。下面是它们的列表:黄瓜-js文档
  2. 如果要从钩子中引用页面对象,可以使用全局page,如下所示:页对象-selenium-黄瓜-js
  3. 您的loginApp()函数可能仍然无法工作,因为您以this.driver的身份访问webdriver,以this.driver.helpers的形式访问帮助程序。它们也是由selenium-cucumber-js帮助者全局定义的。

因此,您的hooks.js应该如下所示:

代码语言:javascript
复制
module.exports = function () {
  this.BeforeScenario(function(scenario, done) {
    console.log('BeforeScenario: ' + page.login.loginApp());
    done();
  });

};

还有你的login.js

代码语言:javascript
复制
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();
  }

};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53384522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档