RemoteWebDriver可以理解为,环境部署在Machine A,然后执行Machine B的浏览器上,远程的优点是:
- 可以更方便的进行跨平台、浏览器的测试
- 避免环境污染,使用一个纯净的机器
这里,我们remote browser 使用的是docker 搭建的server,提供各种remote browser。
废话不多说,直接Part 1,配置maven;Part 2,code demo
Part 1,配置maven
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-ie-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
强调:!!!!!!!!!!!!!!!!!!!!!!!!
使用version 3.4.0以上的版本吧,一开始使用的是2,47的版本,那叫一个惨不忍睹,就是不过。
WebDriver driver = new RemoteWebDriver(URL remoteAddress, Capabilities desiredCapabilities)
这里要看到 sessionId有值,才算可以连接成功。
前方高能,有大坑:
Exception:
java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet()Ljava/util/stream/Collector;
at org.openqa.selenium.remote.ProtocolHandshake.streamW3CProtocolParameters(ProtocolHandshake.java:284)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:149)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
当看到这一部分call stack,恭喜你,请在pom中加入:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
Part 2,code demo
DesiredCapabilities ffDesiredcap= new DesiredCapabilities("firefox", "57.0", Platform.LINUX);
WebDriver driver = new RemoteWebDriver(new URL("http://" + "remoteip" + ":4444/wd/hub"), ffDesiredcap);
driver.manage().window().maximize();
就这么一小段,三个参数:"firefox", "57.0","remoteip" ;浏览器类型,浏览器版本,远程ip