Selenium简介及打开浏览器脚本封装
Selenium 介绍
用于Web应用程序测试的工具,Selenium是开源并且免费的,覆盖IE、Chrome、FireFox、Safari等主流浏览器,通过在不同浏览器中运行自动化测试。支持Java、Python、Net、Perl等编程语言进行自动化测试脚 本编写。
官网地址:
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. Chrome与ChromeDriver版本对照说明(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. Firefox与geckodriver对应版本说明
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; } }