思维导图
Slelenium框架的远程控制主要是通过RemoteWebDriver这个类的对象实现.
运行的测试代码放在客户端,而运行测试代码的地方是服务端,我们在服务端上配置好WebDriver地址,并启动独立测试jar包后,通过RemoteWebDriver将客户端指定的代码传输到服务端上运行.下面是一个例子
1.首先,在服务端上配置WebDriver的地址,即将相应的WebDriver解压的固定的文件夹后,将这个文件夹配置到环境变量的path中(如果省略这步,可以在客户端的代码中设置System.property,这在前面的例子中已经讲过,不过这样进行远程调用显然不合适,直接在服务器端上配置WebDriver的地址更好一些),举例:
//首先进入放置独立JAR包的文件夹,然后在服务器端启动,注意JAR包的版本号
java -jar D:selenium-server-standalone-3.13.0.jar
2. 在本地,即客户端上写入测试代码,通过RemoteWebDriver在服务器端运行,举例:
public void testRemoteWebDriver(){
//如果不在服务器上配置WebDriver地址,则需要在测试代码中指定
//System.setProperty("webdriver.chrome.driver","E:\\IdeaProjects\\DocumentPractice\\AutoTest\\src\\resource\\chromedriver.exe");
//第一个参数:表示服务器的地址及端口号,4444是默认值,可以在启动服务器是使用 -port指定。第二个参数:表示预期的执行对象,其他的浏览器都可以以此类推
WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub/"), DesiredCapabilities.chrome());
driver.manage().window().maximize();
driver.get("http://www.baidu.com");
driver.quit();
}
在刚开始写Selenium框架是,贴上过这张图片,他是Selenium GRID的结构图
Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。
举例说明一下,比如当自动化测试用例达到一定数量的时候,比如上万,一台机器执行全部测试用例耗时5个小时(只是举例,真正的耗时是需要根据测试用例场景的复杂度决定的),而如果需要覆盖主流浏览器比如Chrome、Firefox,加起来就是10个小时;这时候领导跟你说有什么办法可以解决这个执行速度?当然最笨的办法就是另外拿台机器,然后部署环境,把测试用例分开去执行然后合并结果即可。而Selenium也想到了这点,所以有了Selenium Grid的出现,它就是解决分布式执行测试的痛点。
java -jar selenium-server-standalone-3.13.0.jar -role hub -maxSession 10 -port 4444
- role hub :启动的是HUB,
-maxSession :最大会话数量
-prot:指定端口
使用浏览器打开http://localhost:4444/grid/console
java -Dwebdriver.chrome.driver=E:\chromedriver.exe -jar selenium-server-standalone-3.13.0.jar -role node -port 6666 -hub http://192.168.0.245:4444/grid/register -browser browserName=chrome
-role node :启动的是node节点
-hub :hub 的地址及端口号
-Dwebdriver.chrome.driver:驱动类型
-maxSession :最大会话数量
-browserName:浏览器名称
-注意,有些参数如果不必要时,是可以不用写的,比如platform是系统.
public void testGrid(){
DesiredCapabilities capability = new DesiredCapabilities();
capability.setBrowserName("chrome");
//capability.setPlatform(Platform.WINDOWS);
try {
//根据端口号可以指定NODE节点,如果端口号是4444,即注册服务器端的端口号,则selenium会根据测试代码的配置匹配合适的NODE进行测试,DesiredCapabilities就是专门的配置对象
WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:5555/wd/hub"),capability);
driver.get("http://www.baidu.com");
driver.quit();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}