selenium - 如何启动所有空手道功能,设置将哪个浏览器用作外部 Maven 变量
问题描述
我试图找到一种方法来通过 maven 使用外部变量来设置浏览器(使用本地 webdriver 或使用 Selenium 网格)来启动空手道测试中的所有功能。
所以像:
mvn test -Dbrowser=chrome (or firefox, safari, etc)
或使用 Selenium 网格:
mvn test -Dbrowser=chrome (or firefox, safari, etc) -Dgrid="grid url"
对于 Cucumber 和 Java,使用单例设置全局 web 驱动程序非常简单,然后在所有测试中使用该驱动程序。通过这种方式,我可以使用不同的本地或远程 Web 驱动程序运行测试。
在空手道中,我尝试了不同的解决方案,最后一个是:
- 将空手道配置文件定义为变量“浏览器”
- 在我仅设置空手道驱动程序的单个功能“X”中使用变量“浏览器”
- 从所有其他带有 callonce 的功能中重新调用功能“X”以使用该驱动程序
但它没有用,老实说,在我看来这不是正确的方法。可能能够从功能内部的 Javascript 函数设置空手道驱动程序是正确的方法,但我无法找到解决方案。
我发现空手道的另一个问题是使用本地或远程网络驱动程序区分行为,因为它们以不同方式设置的功能文件。
那么有没有人有我同样的需求,我该如何解决呢?
解决方案
在彼得托马斯的建议下,我使用了这个 karate-config.js
function fn() {
// browser settings, if not set it takes chrome
var browser = karate.properties['browser'] || 'chrome';
karate.log('the browser set is: ' + browser + ', default: "chrome"');
// grid flag, if not set it takes false. The grid url is in this format http://localhost:4444/wd/hub
var grid_url = karate.properties['grid_url'] || false;
karate.log('the grid url set is: ' + grid_url + ', default: false');
// configurations.
var config = {
host: 'http://httpstat.us/'
};
if (browser == 'chrome') {
if (!grid_url) {
karate.configure('driver', { type: 'chromedriver', executable: 'chromedriver' });
karate.log("Selected Chrome");
} else {
karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: grid_url });
karate.log("Selected Chrome in grid");
}
} else if (browser == 'firefox') {
if (!grid_url) {
karate.configure('driver', { type: 'geckodriver', executable: 'geckodriver' });
karate.log("Selected Firefox");
} else {
karate.configure('driver', { type: 'geckodriver', start: false, webDriverUrl: grid_url });
karate.log("Selected Firefox in grid");
}
}
return config;
}
通过这种方式,我能够调用测试套件,指定要直接从命令行使用的浏览器(用于 Jenkins 管道):
mvn clean test -Dbrowser=firefox -Dgrid_url=http://localhost:4444/wd/hub
推荐阅读
- javascript - 第一个函数完成后执行第二个函数
- vba - Jacobian [vba] 所需方程的导数
- flutter - 为什么我的 TextEditingController 不起作用?
- android - Android 26 只返回一个路径 Context.getExternalFilesDirs()
- r - 如何强制 rmarkdown pdf 输出在新页面中启动目录?
- nginx - SSL 证书无效
- asp.net-core - Html Helper 到 Tag Helper 的转换
- python - 模板继承不起作用 - Django 教程
- c# - 如何将 C# BigInteger 转换为 MySQL DECIMAL(36,18)?
- arrays - Laravel foreach 循环新数组返回空