我在多个 PC 中有多个Firefox
版本,其中一些最新,47
,有些版本旧版本< /强>
我关注this
并设置RemoteWebDriver
与Marionette
,下一代FirefoxDriver
以支持 Firefox版本47 进行自动化,如下所示: -
URL server = new URL("http://localhost:4444/wd/hub")
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
WebDriver webDriver = new RemoteWebDriver(server, capabilities);
webDriver.get("https://www.google.co.in");
Firefox版本47 可以正常运行,但是当我在其他 PC 上安装 Firefox旧版 ,它给exception
如下: -
引起:org.openqa.selenium.remote.UnreachableBrowserException: 不能sta
rt一个新的会议。可能的原因是遥控器的无效地址 服务器或br
owser启动失败。
构建信息:版本:&#39; 2.53.0&#39;,修订版:&#39; 35ae25b&#39;,时间:&#39; 2016-03-15 17:00:58&#39;
系统信息:主机:&#39; com-PC&#39;,ip:&#39; 192.168.3.3&#39;,os.name:&#39; Windows 7&#39;, os.arch:&#39;
x86&#39;,os.version:&#39; 6.1&#39;,java.version:&#39; 1.8.0_92&#39;
驱动程序信息:driver.version:MarionetteDriver
引起:org.openqa.selenium.WebDriverException: org.apache.http.conn.HttpHost
ConnectException:连接到localhost:3125 [localhost / 127.0.0.1] 失败:Connec
拒绝:连接
构建信息:版本:&#39; 2.53.0&#39;,修订版:&#39; 35ae25b&#39;,时间:&#39; 2016-03-15 17:00:58&#39;
系统信息:主机:&#39; com-PC&#39;,ip:&#39; 192.168.3.3&#39;,os.name:&#39; Windows 7&#39;, os.arch:&#39;
x86&#39;,os.version:&#39; 6.1&#39;,java.version:&#39; 1.8.0_92&#39;
驱动程序信息:driver.version:MarionetteDriver
引起:java.net.ConnectException:连接被拒绝:连接
警告 - 例外:拒绝连接:连接
当我删除行capabilities.setCapability("marionette", true);
表示删除MarionetteDriver
支持时,它与 Firefox旧版本配合良好,但使用提升exception
Firefox版本47 即。 UnreachableBrowserExcetion
。
所以我的问题是: -
有没有办法知道Firefox version
或任何其他解决方案,我可以同时使用旧和新版 Firefox < /强> ??。
我想要一个通用解决方案,我的代码可以智能地知道它何时从MarionetteDriver
开始,以及何时FireFoxDriver
基于FireFox Version
}。
提前致谢...:)
答案 0 :(得分:2)
在测试开始时设置一个布尔标志,具体取决于您是否要在43或47上运行它。检查代码中您创建驱动程序的标志,例如:
boolean useMarionette = true //false
URL server = new URL("http://localhost:4444/wd/hub")
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", useMarionette);
WebDriver webDriver = new RemoteWebDriver(server, capabilities);
webDriver.get("https://www.google.co.in");
现在如果你将useMarionette设置为true,它将与marionette一起运行,如果设置为false,则不会。
如果您真的想要解析可用的firefox版本的Windows注册表,这里有一个部分示例:
How to check if a program is installed on Windows system
使用如下:
public class Test {
public static void main(String... args) throws Exception {
RegistryKey firefoxKey;
RegistryKey.initialize(Test.class.getResource("jRegistryKey.dll").getFile());
RegistryKey key = new RegistryKey(RootKey.HKCU, "SOFTWARE\\Mozilla\\Mozilla Firefox");
for (Iterator<RegistryKey> subkeys = key.subkeys(); subkeys.hasNext();) {
firefoxKey = subkeys.next();
if(firefoxKey.getName().contains("47") {
//marionette
}
//start browser with or without marionette
}
}
}
答案 1 :(得分:-1)
现在我通过以下方法实现了这一目标: -
public static String executeCommand(List<String> commands)
throws IOException {
ProcessBuilder builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(
p.getInputStream()));
return r.readLine();
}
//this command gives the current installed path of Firefox in c drive
String[] getInstalledFirefoxDirectoryCmd = { "cmd.exe", "/c", "dir /s/b \"C:/firefox.exe\""};
String installedFirefoxLocation = executeCommand(Arrays.asList(getInstalledFirefoxDirectoryCmd));
//this command will give version of the installed Firefox
String[] getFirefoxVersionCmd = { "cmd.exe", "/c", "\"" + installedFirefoxLocation + "\" -v | more" };
String version = executeCommand(Arrays.asList(getFirefoxVersionCmd));
int version_int = Integer.parseInt(version.replace("Mozilla Firefox ", "").split("\\.")[0]);
URL server = new URL("http://localhost:4444/wd/hub")
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
//use marionette if ff version equal or greater than 47
if(version_int >= 47) {
capabilities.setCapability("marionette", true);
}
WebDriver webDriver = new RemoteWebDriver(server, capabilities);
webDriver.get("https://www.google.co.in");
通过这种通用方式,我们可以使用相同的代码在多个 PC 中自动执行测试。无论在 Pcs 上安装了哪种版本的 Firefox 。
<强>被修改.. 强>
对于 Mac Pcs ,我们可以更改command
以获取已安装Firefox
的版本,如下所示: -
String installedFirefoxLocation = "/Applications/Firefox.app/Contents/MacOS/firefox"
// it's default location
String[] getFirefoxVersionCmd = { installedFirefoxLocation + " -v | more" };
如果firefox
未安装在默认位置,那么我们可以按路径或Firefox
属性提供System
二进制位置,因为如果没有提供Firefox
二进制文件,selenium就无法运行location
如果安装在其他位置。
要检查OS
,我们可以按照以下方式使用: -
String OS = System.getProperty("os.name").toLowerCase();
if(OS.indexOf("win") >= 0) {
//Means it's windows
}
if(OS.indexOf("mac") >= 0) {
//Means it's mac
}
...:)