我正在尝试学习硒用于自动化测试。 (这是我第一次使用Eclipse IDE)我关注的每个例子都会看到下面的一些内容
public static void main(String[] args) {
WebDriver driver;
System.setProperty("webdriver.chrome.driver", "C:\mylibs\chromedriver.exe");
driver=new ChromeDriver();
driver.navigate().to("myurl");
}
问题
1>如果我在团队环境中工作,如果其他团队成员没有相同的ChromeDriver路径,则上述代码将无效。我如何注入路径?
2 - ;代码需要定位多个浏览器,如Chrome,IE,Edge等。这意味着我无法启动特定的WebDriver(如上例中的ChromeDriver)如何在运行时注入特定的WebDriver?
3>为什么不使用RemoteWebDriver
作为类型而不是WebDriver
?看起来每个特定的WebDriver都派生自RemoteWebDriver
,而RemoteWebDriver
有更多方法可供使用?
现在对于前两个问题,一个解决方案是使用args,如下面的
public static void main(String[] args) {
RemoteWebDriver driver;
System.setProperty("webdriver.chrome.driver", args[0]+chromedriver.exe");
if(args[1] == "chrome")
{
driver=new ChromeDriver();
}
if(args[1] == "edge")
{
driver= new EdgeDriver();
}
if(args[1] == "ie")
{
driver= new IEDriver();
}
driver.navigate().to("myurl");
}
有没有更好的方法呢?
更新1
根据我收到的答案,我想我不清楚我的问题2
当测试人员完成编写所有测试时,我假设在回归测试期间我们不从Eclipse运行这些测试。我猜测一些CI工具,例如jenkins
,必须自动为我们需要测试的所有支持的浏览器执行这些测试。这意味着Jenkins需要知道Web驱动程序在构建服务器上的位置。该路径可能与他/她在开发过程中使用的本地计算机上的本地路径不同。 Jenkins还需要为每个浏览器特定的测试注入不同的Web驱动程序。因此,我们不能在代码中硬编码特定的Web驱动程序,它需要在测试开始时提供。 (像依赖注入一样)
答案 0 :(得分:0)
(问:1)
对于初学者来说,在java中反斜杠字符' \'是一个转义字符,因此要指定一个窗口路径,每个反斜杠都包含2以将1插入字符串。
所以你的路径应该是这样的:" C:\\ Windows \\ Drivers \\ etc ..."
当你说" Inject"路径,你"注入"它与System.setProperty(a,b)
您需要先知道路径值,然后注意"注入"任何进入系统属性的东西。
一个涉及通信的解决方案 是告诉他们在驱动器的根目录下安装驱动程序文件,因此可以通过硬编码访问它路径。
您也可以简单地在jar文件本身中包含所需的文件。
另一种编码解决方案 ,用于搜索可能存储文件的已知或公共目录。这可以通过以下代码中的递归来完成
/** @param searchDirectory - this can be whole system searched,
* by starting at "C:\\".
* Otherwise, give it more defined paths of common directories */
public String getPath(String searchDirectory, String fileName) {
File folder = new File(searchDirectory);
File[] files = folder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
return getPath(file.getPath(), fileName);
} else if (file.getName().equals(fileName)) {
return file.getPath();
}
}
return null;
}
(问:2)
如果你想实际动态地将代码注入到一个正在运行的jar文件中,这在这里根本不需要,那么你将自己开始一项全新的研究考察,让自己成为一名小黑客。
然而,
在主方法中指定参数时,(查看您如何选择传递参数的示例),您需要指定特定属性在参数中指定了Web驱动程序。
这可以很容易地完成:
public static void main(String[] args) {
System.setProperty("webdriver." + args[1] + ".driver", args[0] + args[1] + "driver.exe");
switch (args[1]) {
case "chrome":
driver = new ChromeDriver();
break;
case "edge":
driver = new EdgeDriver();
break;
case "ie":
driver = new IEDriver();
break;
}
}
(问:3)
您是否要使用" RemoteWebDriver"由您决定,查看API文档中的selenium并确保它与您尝试执行的内容兼容。
答案 1 :(得分:0)
对于Ques 1,您可以将驱动程序保留在项目文件夹中。这样,所有团队成员都将拥有相同的驱动程序文件夹位置。
对于Ques 2,可以使用属性文件管理多个环境和浏览器。可以使用CI工具
设置回归期间远程计算机上的执行