在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'。
这会导致问题吗?
答案 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();