当前位置: 首页 > 知识库问答 >
问题:

如何使用selenium (Java)同时支持旧版和新版Firefox

秦渝
2023-03-14

我在多台PC上有多个版本的Firefox,其中一些具有最新版本,即47,有些具有较旧的版本。

我已经按照这个设置Remote teWebDriverMarionette,下一代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上运行良好,但当我在安装Firefox旧版本的其他PC上运行相同时,它会给出异常如下:-

原因:org.openqa.selenium.remote。无法访问BrowserException:无法sta

rt新会话。可能的原因是远程服务器的地址无效或br

启动失败。

内部版本信息: 版本: '2.53.0', 修订版本: '35ae25b', 时间: '2016-03-15 17:00:58'

系统信息: 主机: 'com-PC', ip: '192.168.3.3', os.name: 'Windows 7', os.arch: '

x86', os.version: '6.1', java.version: '1.8.0_92'

驱动信息:driver.version:MarionetteDriver

原因:org.openqa.selenium。WebDriverException:org.apache.http.conn.HttpHost

ConnectException: Connect to localhost:3125 [localhost/127.0.0.1] 失败: Connec

拒绝:连接

内部版本信息: 版本: '2.53.0', 修订版本: '35ae25b', 时间: '2016-03-15 17:00:58'

系统信息: 主机: 'com-PC', ip: '192.168.3.3', os.name: 'Windows 7', os.arch: '

x86', os.version: '6.1', java.version: '1.8.0_92'

驱动信息:driver.version:MarionetteDriver

原因:java.net.ConnectException:连接被拒绝:连接

警告 - 异常:连接被拒绝:连接

当我删除一行<code>功能时。setCapability(“木偶”,真)意味着删除<code>MarionetedDriver异常。<code>不可访问的浏览器扩展。

所以我的问题是:-

有什么方法可以知道Firefox版本或任何其他解决方案,我可以通过这些解决方案同时运行旧版本和新版本的Firefox??。

我想要一个通用的解决方案,在< code>FireFox Version的基础上,我的代码能够智能地知道它何时开始使用< code>MarionetteDriver以及何时使用< code>FireFoxDriver。

提前感谢...:)

共有2个答案

熊嘉茂
2023-03-14

现在我通过以下方法实现了这一点:-

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上用相同的代码自动测试。不管那些PC上安装的是哪个版本的Firefox。

编辑。。

对于Mac电脑,我们可以更改< code >命令来获取已安装的< code>Firefox的版本,如下所示:-

String installedFirefoxLocation = "/Applications/Firefox.app/Contents/MacOS/firefox"
// it's default location

String[] getFirefoxVersionCmd = { installedFirefoxLocation + " -v | more" };

如果< code>firefox未安装在默认位置,那么我们可以通过路径或< code>System属性提供< code>Firefox二进制位置,因为如果selenium安装在其他位置,则在不提供< code>Firefox二进制< code >位置的情况下无法工作。

为了检查< code>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
}

...:)

艾宏远
2023-03-14

根据您想在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注册表,下面是一个部分示例

如何检查程序是否安装在Windows系统上

按如下方式使用:

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
        }
    } 
}
 类似资料:
  • 问题内容: 我想将我的.java(几个)编译成至少与Java 兼容的,较新的(最好是较新的)版本。(我有) 问题答案: 是的,您可以在编译时设置编译器的版本。并将您的Java代码编译为Java的旧版本。 从Oracle文章:http : //docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html 交叉编译示例 在这里,我们使用ja

  • 我想将我的.java(几个)编译成一个,该至少兼容和更新版本,最好是和更新版本的Java。(我有)

  • 我计划从JBOSS EAP迁移到支持旧版本Java如6或7的Wildfly版本。 我找不到与野生苍蝇和java的兼容性矩阵。 另外,有任何版本的野蝇支持solaris 5吗? wildfly 8是否支持旧的java和Solaris版本。 有人能给我指一下矩阵吗?在那里我可以找到wildfly的兼容性和需求。

  • 根据我的理解,这是一个java版本问题。因此,我继续安装Java1.8。 当我运行时,我得到以下信息: java版本“1.8.0_77”java(TM)SE运行时环境(build1.8.0_77-b03)java HotSpot(TM)64位服务器VM(build25.77-b03,混合模式) 我对java和selenium还很陌生,不能理解这是一个很好的深度。任何帮助修复这是非常感谢的。

  • 我正在尝试迁移tomcat服务器。 两者都使用版本,并且都应该准备好将我的java/jsp文件从一台服务器带到另一台服务器。我做到了,并且我得到了错误。这很正常,因为在旧的版本中我有,在新安装中我有(均来自Oracle)。 我继续将第二个升级到1.8。一切都很好,因为在新版本中,java版本的输出是: java版本“1.8.0\u 191”java(TM)SE运行时环境(build 1.8.0\u

  • 今天我重新开始做一个旧的rails项目。一个让我抓狂的问题是我无法运行javascript测试用例,尽管我记得在我离开项目时它们都通过了。我正在使用 selenium webdriver 2.25.0水豚1.1.2cucumber1.2.1 无法干净地启动Firefox,参数:[“-silent”](Selenium::WebDriver::Error::WebDriverError) 我想这是因