程序笔记   发布时间:2022-07-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇文章讲了如何通过SELEnium Grid做分布式自动化测试࿰c;不清楚的可以点击手把手教你使用SELEnium Grid实现分布式自动化测试进行阅读。

上次我们遇到一个问题࿰c;就是我们在执行脚本的时候࿰c;发现每次只能在一个Node上面执行浏览器操作,我们在执行脚本的时候࿰c;如何在多个Node上同时执行浏览器操作呢?

一、ThreadLocal简介

ThreadLocal是JDK包提供的࿰c;它提供线程本地变量࿰c;如果创建一个ThreadLocal变量࿰c;那么访问这个变量的每个线程都会有这个变量的一个副本࿰c;在实际多线程操作的时候࿰c;操作的是自己本地内存中的变量࿰c;从而规避了线程安全问题。(文末有作者的笔记分享)

@H_772_19@

 1import org.openqa.SELEnium.WebDriver;
 2
 3/**
 4 * @author 作者:测试工程师成长之路
 5 * @version 创建时间:2021/7/31
 6 * 类说明:
 7 */
 8public class BrowserUtils {
 9    private static ThreadLocal<WebDriver> threadLocal = new ThreadLocal<>();
10
11    /**
12     * 从线程ThreadLocal获取存放的驱动
13     * @return
14     */
15    public static WebDriver getDriver(){
16        return threadLocal.get();
17    }
18
19    /**
20     * 将驱动设置给线程ThreadLocal
21     * @param driver
22     */
23    public static void setDriver(WebDriver driver){
24        threadLocal.set(driver);
25    }
26}

二、启动Hub和Node

1#启动hub
2java -jar SELEnium-server-standalone-3.5.3.jar -role hub
3
4#启动Node1和Node2
5#分别在两台机器上执行命令
6java -jar SELEnium-server-standalone-3.5.3.jar -role node -port 5555 -hub http://hub ip:4444/grid/register -maxSession 5 -browser browserName=chrome,SELEniumProtocol=WebDriver,maxInstances=5

【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?

三、测试脚本修改

 1import org.openqa.SELEnium.by;
 2import org.openqa.SELEnium.Keys;
 3import org.openqa.SELEnium.Platform;
 4import org.openqa.SELEnium.WebDriver;
 5import org.openqa.SELEnium.remote.DesiredCapabilities;
 6import org.openqa.SELEnium.remote.RemoteWebDriver;
 7import org.testng.Annotations.Test;
 8
 9import Java.net.MalformedURLException;
10import Java.net.URL;
11
12/**
13 * @author 作者:测试工程师成长之路
14 * @version 创建时间:2021/7/19
15 * 类说明:SELEnium Grid
16 */
17public class SELEniumGridTest {
18    public static final String browserName = "chrome";
19
20    @Test
21    public void testGrid() throws InterruptedException {
22        try {
23            // System.setProperty("webdriver.chrome.driver","D:\software\SELEnium\chromedriver.exe");
24
25            DesiredCapabilities capability = new DesiredCapabilities();
26            capability.setBrowserName(browserName);
27            capability.setPlatform(Platform.WINDOWS);
28
29            WebDriver driver = new remoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
30            BrowserUtils.setDriver(driver);
31            BrowserUtils.getDriver().get("http://www.baidu.com");
32            BrowserUtils.getDriver().manage().window().maximize();
33            Thread.sleep(3000);
34            //输入 hadoop查询
35            BrowserUtils.getDriver().findElement(By.id("kw")).sendKeys("mrjade" + Keys.ENTER);
36            Thread.sleep(3000);
37            BrowserUtils.getDriver().findElement(By.xpath("//*[@id="1"]/h3/a")).click();
38            Thread.sleep(5000);
39
40            BrowserUtils.getDriver().close();
41            BrowserUtils.getDriver().quit();
42
43        } catch (MalformedURLException E) {
45            e.printStackTrace();
46        }
47    }
48}

四、testng.xml配置

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 3<suite NAME="Suite" parallel="tests" thread-count="2">
 4    <test NAME="Test1">
 5        <classes>
 6            <class NAME="seleniumGridTest">
 7                <methods>
 8                    <include NAME="testGrid"></include>
 9                </methods>
10            </class>
11        </classes>
12    </test>
13    <test NAME="Test2">
14        <classes>
15            <class NAME="seleniumGridTest">
16                <methods>
17                    <include NAME="testGrid"></include>
18                </methods>
19            </class>
20        </classes>
21    </test>
22</suite>

说明:parallel 该参数的值falsec;@H_424_2@methods࿰c;testsc;classesc;instances。默认false,必须和thread-count配套使用࿰c;否则相当于无效参数࿰c;thread-count决定了并行测试时开启的线程数量。 1.parallel="mehods":TestNG将并行执行所有的测试方法在不同的线程里。 2.parallel="tests":TestNG将并行执行在同一个<test>标签下的所有方法在不同线程里。 3.parallel="classes":TestNG将并行执行在相同<class>下的方法在不同线程里。 4.parallel="instances":TestNG将并行执行相同实例下的所有方法在不同的线程里。

五、遗留问题

上述代码可以实现在不同Node上同时启动chrome浏览器࿰c;那么如何分别启动chromefirefox呢࿰c;在尝试过程中发现无法启动firefoxc;可能是版本方面不兼容导致࿰c;但是尝试了好几个版本依然没有解决࿰c;以下是尝试过的版本信息

1firefox version:56,60
2geckodriver version:0.18.0,0.19.0,0.20.0
3SELEnium version:3.5.3

附:SELEnium与firefox࿰c;geckodriver版本映射表

【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?

SELEnium与firefox࿰c;geckodriver版本映射表

因为虑到chrome版本与SELEnium版本兼容性的问题࿰c;所以就没有尝试不同SELEnium版本去启动firefox,有兴趣的小伙伴可以去尝试尝试。

最后感谢每一个认真阅读我文章的人࿰c;看着粉丝一路的上涨和关注࿰c;礼尚往来总是要有的࿰c;然不是什么很值钱的东西࿰c;如果你用得到的话可以直接拿走:

【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?

这些资料࿰c;对于【软件测试】的朋友来说应该是最全面最完整的备战仓库࿰c;这个仓库也陪伴上万个测试工程师们走过最艰难的路程࿰c;希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享࿰c;广告勿扰)

可以自助拿走࿰c;群号:175317069 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦

【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?

大佬总结

以上是大佬教程为你收集整理的【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?全部内容,希望文章能够帮你解决【500字原创】连Selenium Grid都没搞懂,还敢说熟练掌握Selenium自动化?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。