代码之家  ›  专栏  ›  技术社区  ›  Lieutenant Dan

做一个“普通人”登录.js包括;包括夜视.js测验

  •  0
  • Lieutenant Dan  · 技术社区  · 8 年前

    在为我的web应用程序编写测试时,我必须首先模拟登录,然后我的其余测试才能运行并查看内部页面。现在我正在调整代码,这样我就可以为公共函数创建一个include,比如我的login。但只要我把下面的代码移到一个单独的文件中,并通过include调用 require -它不再按预期运行。

    例如。 下面登录并允许我的其他功能,如果,包含在同一个文件中。在我的其他内屏幕功能之上。

    // Login screen, create opportunity
    
    this.LoginScreen = function(browser) {
            browser
                    .url(Data.urls.home)
                    .waitForElementVisible('#login', 2000, false)
                    .click('#login')
                    .waitForElementVisible('div.side-panel.open', 4000, false)
                    .waitForElementVisible('input#email', 2000, false)
                    .waitForElementVisible('input#password', 2000, false)
                    .click('input#email')
                    .pause(500)
                    .setValue('input#email', Data.ProjMan.username)
                    .click('input#password')
                    .pause(500)
                    .setValue('input#password', Data.ProjMan.password)
                    .click('input#email') 
                    .pause(500)
                    .click('div.form.login-form .btn')
                    .pause(5000)
    
            Errors.checkForErrors(browser);
    };     
    
    // Inner functions run after here, sequentially
    

    但一旦我把上面提到一个单独的文件,例如; Logins.js ,然后在原始测试文件的顶部用调用它。(是,路径正确)。

    var Logins      = require("../../lib/Logins.js");
    

    它只是不再模拟登录。有什么想法吗?我应该把它取下来吗 this.LoginScreen 函数包装器,并以不同的方式调用它以从外部文件执行,还是我需要从原始文件中再次启动它,除了外部require路径?

    我也试过包装 module.exports = { '从单独的文件登录功能,但仍然失败。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Kireeti Annamaraj    8 年前

    Nightwatch允许您运行基于页面对象的测试,也就是说,您可以将公共测试函数外部化,并在常规测试中使用它们。这可以通过使用 page_objects_path '属性。我添加了常见的“登录”功能,并在项目中的示例“单个测试”中使用了它 here .

    :

    将公共函数放在.js文件中,并将其放在文件夹下(例如:tests/pages)/登录.js)并在nighwatch配置文件中传递文件夹路径,如下所示:

     nightwatch_config = {
          src_folders : [ 'tests/single' ],
          page_objects_path: ['tests/pages'],
    

    下面是一个常见登录函数的示例(登录.js):

    var loginCommands = {
    
      login: function() {
        return this.waitForElementVisible('body', 1000)
          .verify.visible('@userName')
          .verify.visible('@password')
          .verify.visible('@submit')
          .setValue('@userName', 'Enter Github user name')
          .setValue('@password', 'Enter Github password')
          .waitForElementVisible('body', 2000)
    
      }
    };
    
     module.exports = {
          commands: [loginCommands],
            url: function() {
              return 'https://github.com/login';
            },
          elements: {
            userName: {
              selector: '//input[@name=\'login\']',
              locateStrategy: 'xpath'
            },
            password: {
              selector: '//input[@name=\'password\']',
              locateStrategy: 'xpath'
            },
            submit: {
              selector: '//input[@name=\'commit\']',
              locateStrategy: 'xpath'
            }
          }
        };  
    

     module.exports = {
          'Github login Functionality' : function (browser) {
    
        //create an object for login
        var login = browser.page.login();
        //execute the login method from //tests/pages/login.js file
        login.navigate().login();
    
        //You can continue with your tests below:
        // Also, you can use similar Page objects to increase reusability
            browser
            .pause(3000)
              .end();
          }
        };
    
        2
  •  0
  •   Austin Barrington    6 年前

    上面的答案是绝对正确的,但我做了斗争,如何提供登录用户的详细信息。

    var loginCommands = {
    
        login: function() {
          return this.waitForElementVisible('body', 1000)
            .setValue("#email", "<some rnd email address>")
            .setValue('#password', "<some rnd password>")
            .click('button[type=submit]')
            .pause(1000)
        }
      };
      
      module.exports = {
        commands: [loginCommands],
          url: function() {
            return 'https://example.com/login';
          }
      };