Selenium(3)-----远程控制

思维导图

一.RemoteWebDriver

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 GRID

在刚开始写Selenium框架是,贴上过这张图片,他是Selenium GRID的结构图

Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。

举例说明一下,比如当自动化测试用例达到一定数量的时候,比如上万,一台机器执行全部测试用例耗时5个小时(只是举例,真正的耗时是需要根据测试用例场景的复杂度决定的),而如果需要覆盖主流浏览器比如Chrome、Firefox,加起来就是10个小时;这时候领导跟你说有什么办法可以解决这个执行速度?当然最笨的办法就是另外拿台机器,然后部署环境,把测试用例分开去执行然后合并结果即可。而Selenium也想到了这点,所以有了Selenium Grid的出现,它就是解决分布式执行测试的痛点。

  • 1.启动HUB
java -jar selenium-server-standalone-3.13.0.jar -role hub -maxSession 10 -port 4444

- role hub :启动的是HUB,

-maxSession :最大会话数量

-prot:指定端口
  • 2.测试HUB是否启动成功

使用浏览器打开http://localhost:4444/grid/console

  • 3.启动NODE节点
java -jar selenium-server-standalone-2.53.1.jar -role node -port 6666 -hub http://192.168.0.245:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe -maxSession 5 -browser browserName=chrome,seleniumProtocol=WebDriver,maxInstances=5,platform=WINDOWS

-role node :启动的是node节点
-hub :hub 的地址及端口号
-Dwebdriver.chrome.driver:驱动类型
-maxSession :最大会话数量
-browserName:浏览器名称
-注意,有些参数如果不必要时,是可以不用写的,比如platform是系统.
  • 4.使用浏览器刷新http://localhost:4444/grid/console,这里也可以看见node节点的情况.
  • 5.测试NODE是否启动成功,也是通过RemoteWebDriver对象.
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();
        }
    }

猜你喜欢

转载自blog.csdn.net/zh328271057/article/details/82561693