OperaDriver不工作

时间:2013-02-27 11:48:39

标签: c# opera selenium-webdriver selenium-grid

在MSTest类中使用Selenium Grid2和RemoteWebDriver,我很难让OperaDriver工作。

我通过在CMD中运行以下命令来创建Selenium hub和Opera节点:

start java -jar selenium-server-standalone-2.30.0.jar -role hub
start java -jar selenium-server-standalone-2.30.0.jar -role node -port 7001 -browser "browserName=opera,version=11.62,maxInstances=5,platform=WINDOWS" -hub http://localhost:4444/grid/register

这很好用,我可以在浏览器中查看我的集线器时看到注册的节点。

但是每当我尝试在C#测试类中创建一个新的WebDriver时,我都会遇到异常:

DesiredCapabilities operaCapabilities = DesiredCapabilities.Opera();
operaCapabilities.SetCapability(CapabilityType.BrowserName, "opera");
operaCapabilities.SetCapability(CapabilityType.Platform, "WINDOWS");
operaCapabilities.SetCapability(CapabilityType.Version, "11.62");
operaCapabilities.SetCapability("opera.binary", "C:\\Program Files\\Opera\\opera.exe");
operaCapabilities.SetCapability("opera.port", 7001);
RemoteWebDriver operaDriver = new RemoteWebDriver(operaCapabilities);

实际上我得到两个不同的例外 - 第一次在Selenium中创建集线器和节点之后我得到了这个:

  

无法找到支持捆绑启动器的平台,请设置   手动

     

构建信息:版本:'2.30.0',修订版:'dc1ef9c',时间:'2013-02-19   〇点15分27' 秒

     

系统信息:os.name:'Windows 8',os.arch:'x86',os.version:'6.2',   java.version:'1.7.0_15'

     

驱动程序信息:driver.version:OperaDriver

每次之后我都会收到以下错误:

  

无法初始化课程   com.opera.core.systems.runner.launcher.OperaLauncherRunner

我正在使用Selenium-standalone-2.30.0

我使用Opera版本12.14,但在OperaDriver wiki page上看到兼容版本列表后降级到11.62,但错误仍然相同。

我尝试使用和不使用上述功能初始化RemoteWebDriver,并且每次都获得相同的结果。

有谁知道这里的问题是什么以及如何让RemoteWebDriver以这种方式使用Opera?

修改:可能是Opera version 12.14的平台读取为'WINDOWS 8',版本11.62读取时为"WIN32" Opera浏览器并查看Help => About?我在节点和WINDOWS中将平台指定为RemoteWebDriver。如果我尝试将WINDOWS 8指定为RemoteWebDriver的平台,则会在无法找到匹配枚举的地方抛出新的异常:

  

org.openqa.selenium.WebDriverException:   java.lang.IllegalArgumentException:没有枚举常量   org.openqa.selenium.Platform.WINDOWS 8

Edit2 :由于某些原因,CurrentPlatform正在为我返回Vista,即使我正在运行Windows8

Platform platform = Platform.CurrentPlatform;

我还注意到OperaDriver source code以大写字母检查'VISTA',而C#中的平台则显示为'Vista'。

这会导致问题吗?

2 个答案:

答案 0 :(得分:3)

我也一直在遭受这个问题的困扰,并且由于恶意者的暗示,我能够通过使用以下命令行来启动selenium服务器来解决问题:

java -Dos.name=windows -jar selenium-server-standalone-2.32.0.jar

使用-Dos.name=windows相当于System.setProperty("os.name", "windows"),并允许您的C#selenium代码适用于Opera浏览器。

答案 1 :(得分:1)

我在Java中运行时看到了这一点。在调试模式下,它看起来像是OperaLauncherRunner.java中可能的遗漏.launcherNameForOS不支持Platform.getCurrent()返回的WIN8枚举。

在Java中,我通过在创建新的OperaDriver之前将系统属性“os.name”设置为“windows”来捏造它。这迫使Platform.getCurrent返回Opera启动器所满意的XP。

所以在java中我只是使用了这个hack:

System.setProperty("os.name","windows");
driver = new OperaDriver();