Selenium简介及打开浏览器脚本封装

 

Selenium 介绍

用于Web应用程序测试的工具,Selenium是开源并且免费的,覆盖IE、Chrome、FireFox、Safari等主流浏览器,通过在不同浏览器中运行自动化测试。支持Java、Python、Net、Perl等编程语言进行自动化测试脚 本编写。

官网地址:

https://selenium.dev/

 

 

 

 


Selenium家族

Selenium IDE,是Firefox/Chrome浏览器的扩展插件,支持用户录制和回放测试

Selenium WebDriver,提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。

SeleniumGrid,分布式自动化工具,可以在多个测试环境中以并发的方式执行测试脚本,实现测试脚 本的并发执行,缩短大量的测试脚本的执行时间

 

Selenium IDE

Selenium IDE安装

官网下载插件后本地安装  http://www.seleniumhq.org/download/

 

Selenium IDE录制脚本

工具栏 -> Selenium IDE

直接点击菜单栏Selenium 图标

实例:打开浏览器,输入 http://www.baidu.com ,在百度搜索框中输入“哔哩哔哩”,在搜索结果中点击进入到官网

 

Selenium IDE局限性

只能支持Firefox/Chrome浏览器录制的脚本稳定性不够

线性脚本,无法处理复杂的逻辑

 

Selenium WebDriver环境搭建

step1:创建Maven项目  

step2:引入selenium框架/依赖

<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium-java</artifactId>
	<version>3.141.59</version>
</dependency>

 

第一个web自动化脚本

ChromeDriver driver = new ChromeDriver(); 
driver.get("http://www.baidu.com");

 

Selenium WebDriver原理

 

 

web自动化环境问题整理

Chrome

1. chrome浏览器驱动路径

使用Chrome做测试时,报了如下错误:

The path to the driver executable must be set by the webdirver.chrome.driver system properity

解决方案:

设置Chrome驱动文件的路径

System.setProperty("webdriver.chrome.driver",  "xxx");

 

2. ChromeChromeDriver版本对照说明(Chrome V70以下)

ChromeDriver 版本

支持的 Chrome 版本

v2.41

v67-69

v2.40

v66-68

v2.39

v66-68

v2.38

v65-67

v2.37

v64-66

v2.36

v65-67

v2.35

v62-64

v2.34

v61-63

v2.33

v60-62

v2.32

v59-61

v2.31

v58-60

v2.30

v58-60

v2.29

v56-58

Chrome V70以上按照版本对应即可

chrome浏览器各版本下载      http://www.chromedownloads.net/chrome64win/

禁止谷歌浏览器更新    https://jingyan.baidu.com/article/76a7e409f2137afc3b6e15be.html 

ChromeDriver驱动镜像网址   http://npm.taobao.org/mirrors/chromedriver

 

Firefox

1. Firefox路径问题

firefox火狐浏览器去完成自动化测试时,代码报了如下错误:

Cannot find firefox binary in PATH. mark sure firefox is installed

错误原因:

firefox安装在其它路径,不是默认的安装路径

解决办法:

指定firefox可执行文件路径:webdriver.firefox.bin 代码设置:

代码设置:

System.setProperty("webdriver.firefox.bin",  "D:\\Program  Files\\Mozilla Firefox\\firefox.exe");

 

2. selenium 3.x Firefox驱动问题

使用selenium3.x+firefox火狐浏览器去完成自动化测试时,代码报了如下错误:

The path to the driver executable must be set by the webdriver.gecko.driver system properity

错误原因:

缺少火狐浏览器驱动包。如果selenium版本是3.x的,需要使用驱动包

解决办法:

往项目中添加火狐驱动包,并加载驱动的配置。至于该驱动版本适配的浏览器和selenium版本在驱动的

change log里有说明(如:使用selenium 3.5.1+firefox 56)

代码设置:

System.setProperty("webdriver.gecko.driver",  "src/test/resources/geckodriver.exe");

 

3. Firefoxgeckodriver对应版本说明

 

geckodriver版本

Firefox版本

0.15

v 48+

0.16

v 52

0.17

v 52

0.18

v 53

Change Log    https://github.com/mozilla/geckodriver/blob/release/CHANGES.md 

Firefox各版本    http://ftp.mozilla.org/pub/firefox/releases/

Firefox驱动镜像网址 https://npm.taobao.org/mirrors/geckodriver/

 

InternetExplorer

IE浏览器的驱动跟着Selenium版本走即可,比如当前项目使用的Selenium是V3.141.59,那么去Selenium

的镜像网址下载对应版本的IEDriverServer驱动即可(建议使用32位的)

https://npm.taobao.org/mirrors/selenium

 

1. IE浏览器驱动问题

使用IE浏览器去完成自动化测试时,代码报了如下错误:

The path to the driver executable must be set by the webdriver.ie.driver system property

错误总结:

缺少IE浏览器驱动包

解决办法:

往项目中添加IE驱动包,并加载驱动的配置。

System.setProperty("webdriver.ie.driver",  "src/test/resources/IEDriverServer.exe");

下载地址                 http://www.seleniumhq.org/download/

IE驱动版本与Selenium版本保持相同即可   http://selenium-release.storage.googleapis.com/index.html

 

2. IE浏览器保护模式问题

使用IE浏览器去完成自动化测试时,代码报了如下错误: Protected Mode Settings are not the same for all zones 

解决方法1

浏览器设置(但是换一台电脑就不适用了)

打开IE浏览器->工具->安全->全部勾选启用保护模式

解决方法2

忽略浏览器保护模式的设置

InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS

代码:

//取消IE安全设置(忽略IE的Protected Mode的设置) 
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURI TY_DOMAINS,  true);

 

3. IE浏览器缩放设置

使用IE浏览器去完成自动化测试时,代码报了如下错误:

Browser zoom level was set to 125%.It should be set to 100%

错误总结:

浏览器缩放级别设置不对导致的(点工具栏页面->缩放设置)

解决办法:

忽略此设置:InternetExplorerDriver.IGNORE_ZOOM_SETTING 代码:

DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING,  true);

 

4. IE浏览器window丢失问题

使用IE浏览器去完成自动化测试时,代码报了如下错误:

unable to find element with id -- kw

错误总结:

不是因为没有设置等待时间,而是因为之前的window对象已经丢失

解决办法:

最快的解决办法是直接指定一个初始化页面InternetExplorerDriver.INITIAL_BROWSER_URL 

代码:

DesiredCapabilities  capabilities  =  new  DesiredCapabilities();
capabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, "http://www.baidu.com");

 

打开浏览器脚本封装

驱动程序统一放在resources目录下

封装好打开浏览器的方法,方便调用,此处用到了多态的方式

public static void main(String[] args) {
        WebDriver ieDriver = openBrowser("Ie");
        ieDriver.get("https://www.baidu.com");
        
        WebDriver firefoxDriver = openBrowser("Firefox");
        firefoxDriver.get("https://www.baidu.com");
        
        WebDriver chromeDriver = openBrowser("Chrome");
        chromeDriver.get("https://www.baidu.com");
    }
    
    /**
     * 统一浏览器封装
     * @param browserName 指定打开浏览器名
     */
    public static WebDriver openBrowser(String browserName){
        if("chrome".equalsIgnoreCase(browserName)){
            //执行打开chrome的代码
            System.setProperty("webdriver.chrome.driver", "src\\test\\resources\\chromedriver.exe");
            return new ChromeDriver();
        }else if("firefox".equalsIgnoreCase(browserName)){
            //执行打开firefox的代码
            System.setProperty("webdriver.gecko.driver","src\\test\\resources\\geckodriver.exe");
            return new FirefoxDriver();
        }else if("ie".equalsIgnoreCase(browserName)){
            //执行打开ie的代码
            //取消IE安全设置(忽略IE的Protected Mode的设置)
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
            //忽略掉浏览器缩放设置问题
            capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
            //表示让我们脚本使用对应的驱动程序iedriver.exe
            System.setProperty("webdriver.ie.driver","src\\test\\resources\\IEDriverServer.exe");
            return new InternetExplorerDriver(capabilities);
        }else {
            System.out.println("浏览器不支持,请确认你的浏览器名是否正确");
            return null;
        }
    }

 

posted @ 2022-04-05 22:28  boge_blogs  阅读(695)  评论(0编辑  收藏  举报