重新使用用于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)中的这一行;应该写的也不一样。