Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新使用用于Nightwatch.js测试的Selenium WebDriver的浏览器会话_Selenium_Selenium Webdriver_Automated Tests_Nightwatch.js - Fatal编程技术网

重新使用用于Nightwatch.js测试的Selenium WebDriver的浏览器会话

重新使用用于Nightwatch.js测试的Selenium WebDriver的浏览器会话,selenium,selenium-webdriver,automated-tests,nightwatch.js,Selenium,Selenium Webdriver,Automated Tests,Nightwatch.js,我需要编写多个测试(例如登录测试、登录后使用应用程序测试、注销测试等),并需要将它们全部放在单独的文件中。我遇到的问题是,在每次测试之后,在运行下一个测试的开始,新的浏览器会话将启动,并且由于新会话,它不再登录,因此除了登录测试之外,我的所有测试都将失败 那么,有没有一种方法可以使用相同的浏览器会话顺序运行我的所有测试,而不必复制我的登录代码?抱歉,如果这是一个转发,但我已经搜索和研究,没有找到任何答案 或者,是否有一种方法可以以某种方式链接测试文件?就像您运行的一个文件只调用所有其他测试文件一

我需要编写多个测试(例如登录测试、登录后使用应用程序测试、注销测试等),并需要将它们全部放在单独的文件中。我遇到的问题是,在每次测试之后,在运行下一个测试的开始,新的浏览器会话将启动,并且由于新会话,它不再登录,因此除了登录测试之外,我的所有测试都将失败

那么,有没有一种方法可以使用相同的浏览器会话顺序运行我的所有测试,而不必复制我的登录代码?抱歉,如果这是一个转发,但我已经搜索和研究,没有找到任何答案


或者,是否有一种方法可以以某种方式链接测试文件?就像您运行的一个文件只调用所有其他测试文件一样?

重用会话不是一个好主意,因为您可能会以不同的顺序运行测试,但是 您可以将登录代码放入before函数中,甚至可以将其提取到自定义命令中

例如:

1-在夜间监视配置中添加

"custom_commands_path" : "nightwatch/custom-commands",
2-创建自定义命令/login.js

exports.command = function(username, password, callback) {
    var self = this;
    this
        .frame(null)
        .waitForElementPresent('input[name=username]', 10000)
        .setValue('input[name=username]', username)
        .waitForElementPresent('input[name=password]', 10000)
        .setValue('input[name=password]', password)
        .click('#submit');

    if( typeof callback === "function"){
        callback.call(self);
    }
    return this; // allows the command to be chained.
};
3-测试代码-使用前.login(用户,APS剑)


使用此功能将文件链接在一起:

extend = function(target) {
    var sources = [].slice.call(arguments, 1);
    sources.forEach(function (source) {
        for (var prop in source) {
            target[prop] = source[prop];
        }
    });
    return target;
}
并将文件添加到此主文件,如下所示:

require("./testName.js");
module.exports = extend(module.exports,testName);
testName = {
    "Test" : function(browser) {

        browser
            // Your test code
    }
};
让测试文件如下所示:

require("./testName.js");
module.exports = extend(module.exports,testName);
testName = {
    "Test" : function(browser) {

        browser
            // Your test code
    }
};

允许我有一个可以链接所有测试的文件,并始终保持相同的浏览器会话。它会按照主文件中要求的顺序运行测试,如果在最后一个测试完成之前不调用browser.end(),它将使用一个浏览器窗口进行所有测试。

不熟悉Nightwatch.js,但我熟悉selenium测试用例的登录/注销会话问题。我建议看一下和/或在下面的文档中找到的。多个登录仍然是不必要的,而且对于有大量测试的套件来说浪费了很多时间。。。除非你的appstate在每个登录名之间实际上是不同的,这意味着你有更大的问题。这不会破坏标记功能吗?要添加其他测试。。。测试文件应具有相同的“testName”名称,还是必须不同?因为主文件module.exports=extend(module.exports,testName)中的这一行;应该写的也不一样。