Selenium IDE/我的第一个web自动化程序 2020/4/28 周二 64-66
0 Selenium: 驱动浏览器做自动化测试
分三块:
Selenium IDE,是Firefox的扩展插件,支持用户录制和回放测试
Selenium WebDriver,提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。
SeleniumGrid,分布式自动化工具,可以在多个测试环境中以并发的方式执行测试脚本,实现测试脚本的并发 执行,缩短大量的测试脚本的执行时间
Selenium WebDriver
Selenium Grid
1 Selenium IDE:(了解)
Selenium IDE 是一个Firefox/Chorme插件,用于记录和回放用户与浏览器的交互。
只支持Firefox、chrome。其中chrome必须翻墙,所以用Firefox来进行学习。
1.1 下载Selenium IDE for firefox:
Selenium 官网:https://www.selenium.dev/downloads/
选Selenium IDE for firefox: Will enter https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ and click "Add to firefox" will download.
浏览器右上角有个Se小logo,就说明安装好了。
1.2 点击Se的logo,"Record a new test in a new project"/"Create a new project". Enter project name: SeleniumIDETest;Enter Base URL:https://www.baidu.com;Start recording:浏览器会自动打开百度。
1.3 开始操作浏览器。
1 输入腾讯课堂,点击“百度一下”
2 点击第一条记录,会新开一个tab,显示腾讯课堂首页。
回到IDE,右上角关闭录制,填test name:BaiduTest,OK,脚本就录好了。
1.4 脚本回放:
在页面点“Current run test”:会自动输“腾讯课堂”,查询,点了官网链接,但是报错:因为Firefox阻止了新窗口弹出。
->解决方案:Firefox->选项->隐私与安全->权限->拦截弹出式窗口:Uncheck.退出火狐浏览器,重新打开,进行脚本回放,ok。
1.5 导出脚本,为Java、Python、Ruby(必须Firefox版本比较高)
Testname右边有三个点,Export->Java->Export .java file
1.6 Selenium IDE:
Selenium IDE 是一个Firefox/Chorme插件,用于记录和回放用户与浏览器的交互。使用它来创建简单的脚本或者协助进行探索性测试。
缺点:只支持Firefox/Chorme;脚本不稳定;线性脚本,无法处理复杂的逻辑。
2 Selenium WebDriver(重点掌握):
用于Web应用程序测试的工具,Selenium是开源并且免费的,Selenium 测试直接在浏览器中运行,就像真实用户所 做的一样 覆盖IE、Chrome、FireFox、Safari等主流浏览器。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。 支持Java、Python、Net、Perl等编程语言进行自动化测试脚本编写。
2.1 发展历程
2.2 Selenium WebDriver原理
驱动(翻译器):把客户端发送来的指令,翻译成浏览器能识别的语言。
不同浏览器提供不同driver驱动
3 Maven安装配置:
0 Maven作用
maven 作用:项目构建工具,是目前大部分企业在做项目时首选的项目构建,管理工具;也有一部分企业在用Ant,Aspira用的是Ivy
编译代码;项目打包;项目模块化管理;在线管理依赖;提供丰富的插件,方便项目持续集成。
在我们课程中最大的作用管理jar包[其他jar包管理工具:Ant,gradle。
第三方jar(工具包),如Excel、Json
Maven: 别人写好的jar包;git:管理自己的代码
本地下载maven,本地新建一个本地仓库文件夹repository,空的。远程有一个中心仓库,是由maven团队管理的。本地仓库可以直连中心仓库,来获取jar包。但因为中心仓库在美国,直接连很慢。加了阿里云的镜像,就像代理服务。阿里云会定时去同步,就像私服。配了镜像,就会去阿里云取jar,就会很快。
1 下载maven&环境配置:3.6.1
https://maven.apache.org/download.cgi
Maven 3.6.1:D:\developSoftware\apache-maven-3.6.1
1 新建环境变量:变量名MAVEN_HOME,变量值为解压后的文件夹:D:\developSoftware\apache-maven-3.6.1
2 修改PATH变量:
2 修改Maven全局配置文件:
将Maven仓库配置为自己创建的文件夹+配置mirror:修改这个文件D:\developSoftware\apache-maven-3.6.1\conf\settings.xml
创建maven仓库:自定义文件夹作为本地Maven仓库
如新建文件夹 D:\developSoftware\apache-maven-3.6.1\repository
配置文件路径 D:\developSoftware\apache-maven-3.6.1\conf\settings.xml ,
1 将Maven仓库配置为自己创建的文件夹:L55
<localRepository>D:\developSoftware\apache-maven-3.6.1\repository</localRepository>
2 配置阿里云镜像,指定下载jar包的地址,这样访问会比较快:L159-164
<mirror><id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public
</mirror>3 Eclipes中配置maven
Window->Preference->Maven->Installation/User settings, apply.
Maven-Installation: 配置本地maven根目录:D:\developSoftware\apache-maven-3.6.1
Maven-User settings shall as below:
User setting: D:\developSoftware\apache-maven-3.6.1\conf\settings.xml
Local Repository: D:\developSoftware\apache-maven-3.6.1\repository
遇到的问题:
Eclipse->Preference:看不到maven [Solution: https://blog.csdn.net/u013033112/article/details/80618961]
Solution:安装插件
Help --> Install New Software --> Add, 输入如下内容:
m2e
http://download.eclipse.org/technology/m2e/releases
一直Next到最后,提示重启eclipse即可。
4 搭建自动化测试环境
1 创建Maven项目
Group Id:分组,填组织名,如com.lemon
Artifact Id:项目包名(简单理解为jar包名)
Version:版本
Packaging:打包方式
pom.xml添加依赖:
<dependencies> <dependency>...
</dependency>...
</dependencies>1 maven项目结构
src/main/java:一般是开发人员写代码的目录
src/main/resources: 开发人员放项目资源文件的目录
src/test/java:放测试人员代码的目录
src/test/resources:放测试资源文件的目录
Maven Dependencies:通过maven拿下来的项目依赖包存放目录
target: 存放构建后文件的目录
2 Maven的几个常用构建命令
mvn package:打包
mvn install:安装到本地仓库
mvn test:执行单元测试代码
2 引入selenium框架:pom.xml里引入selenium依赖
<dependency><groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>NOTE: Version 应该选比较新,并且usage人数比较多的:https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
进到版本页:然后把maven配置信息复制粘贴到eclipse里pom.xml的文件里。
保存pom.xml后会自动下载依赖包,然后在eclipse中maven dependency下面就能看到这些依赖包
遇到问题:但是我的本地pom一直报错:
解决方法:
pom.xml:
<properties><maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<aspectj.version>1.8.10</aspectj.version>
</properties> <dependencies> <dependency><groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.0</version>
</dependency> <dependency><groupId>com.google.j2objc</groupId>
<artifactId>j2objc-annotations</artifactId>
<version>1.3</version>
</dependency> <dependency><groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-annotations</artifactId>
<version>1.17</version>
<scope>provided</scope>
</dependency> </dependencies> </project>最終我的pom.xml(可用):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 " target="_blank">http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.twentythree</groupId>
<artifactId>webtest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>com.webtest.auto</name>
<properties><maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<aspectj.version>1.8.10</aspectj.version>
</properties> <dependencies> <dependency><groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.0</version>
</dependency> <dependency><groupId>com.google.j2objc</groupId>
<artifactId>j2objc-annotations</artifactId>
<version>1.3</version>
</dependency> <dependency><groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-annotations</artifactId>
<version>1.17</version>
<scope>provided</scope>
</dependency> </dependencies> </project>3 写代码
0.1 下载老版本的Firefox-V56 &取消自动更新:
下载:http://ftp.mozilla.org/pub/firefox/releases/56.0/win64/zh-CN/
设置:
1 打开Firefox浏览器->选项->常规->选中:不检查更新。
2 找到Firefox安装路径:C:\Program Files\Mozilla Firefox,删掉下面的两个updater文件即可。
0.2 下载老版本的chrome-V68,且取消自动更新:
下载:https://www.chromedownloads.net/chrome64win/
设置:https://jingyan.baidu.com/article/76a7e409f2137afc3b6e15be.html
1 右键选中左下角,运行,msconfig,服务,选中:隐藏所有Microsoft服务,取消选中Google更新服务,确定即可。
1 Chrome打开百度首页(好了):
1 代码:
public class OpenBrow
{
public static void main(String[] args)
{
// 相当于环境变量,让测试脚本认识ChromeDriver在哪里
System.setProperty("webdriver.chrome.driver", "src\test\resources\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
}
}
2 问题
Q1: The path to the driver executable must be set by the webdirver.chrome.driver system properity
S1:
1 下载ChromeDriver:http://npm.taobao.org/mirrors/chromedriver,下载什么版本呢?在chrome地址栏输入:chrome://version/ ,查看当前chrome浏览器版本68,查看:http://npm.taobao.org/mirrors/chromedriver/2.40/notes.txt,则对应的chromedriver 可以是V2.41,V2.40,V2.39.先试下V2.40.下载到本地,解压得到一个exe文件,把这个chromedriver.exe文件复制到eclipse-src/test/resources路径下。
2 配置属性:
System.setProperty("webdriver.chrome.driver", "src\main\resources\chromedriver.exe");
代码:
public static void main(String[] args)
{
//相当于环境变量,让测试脚本认识ChromeDriver在哪里
System.setProperty("webdriver.chrome.driver", "src\main\resources\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
}
2 FireFox 打开百度首页:
1 代码:
public class OpenBrow
{
public static void main(String[] args)
{
// 相当于环境变量,让测试脚本认识ChromeDriver在哪里
System.setProperty("webdriver.gecko.driver", "src\test\resources\geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();
driver.get("https://www.baidu.com");
}
}
2 问题:
Q1:Cannot find firefox binary in PATH.
Solution:
//如果firefox安装不是在默认的c盘,需要:设置系统属性:属性名:"webdriver.gecko.bin",属性值:firefox.exe安装的路径
//System.setProperty("webdriver.firefox.bin", value);
Q2: The path to the driver executable must be set by the webdriver.gecko.driver
Solution: 缺少火狐浏览器驱动包。
下载geckodriver驱动包?什么版本呢?根据firefox版本,找到合适的geckodriver版本。
因为firefox是V56,可以下载geckodriver是0.19或者0.21
geckodriver镜像地址:https://npm.taobao.org/mirrors/geckodriver/
选V0.20.0,下载,解压得到geckodriver.exe,把这个文件复制到eclipse,src/test/resources路径下面。
加一行代码:
System.setProperty("webdriver.gecko.driver", "src\main\resources\geckodriver.exe");
3 IE打开百度首页:
Q1:缺少IE浏览器驱动包:The path to the driver executable must be set by the webdriver.ie.driver
Solution:下载IE浏览器驱动包,配置属性
注意:ChromeDriver、FirefoxDriver版本是根据chrome、firefox浏览器版本决定的,但是IEDriver的版本是根据selenium决定的。
因为selenium是3.141.0,所以IEDriver选择:3.141
IEDriver镜像下载:https://npm.taobao.org/mirrors/selenium/
IEDriverServer,64位,3.141.0
把解压的IEDriverServer.exe放到eclipse,src/test/resources路径下,加一行代码:
System.setProperty("webdriver.ie.driver", "src\main\resources\IEDriverServer.exe");
Q2:Protected Mode Settings are not the same for all zones
Solution1: 不推荐
手动打开IE浏览器->工具->安全->所有选项的保护模式全部关闭
Solution2:推荐,代码处理
//忽略IE protected mode的设置
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
InternetExplorerDriver ieDriver = new InternetExplorerDriver(capabilities);
Q3: Unexpected error launching Internet Explorer. Browser zoom level was set to 150%. It should be set to 100%
Solution1:手动调整到100%,不推荐。
Solution2:代码调整,推荐:
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
@SuppressWarnings("deprecation")
InternetExplorerDriver ieDriver = new InternetExplorerDriver(capabilities);
4 封装一个通用的方法来打开各浏览器Chrome、Firefox、IE:
public static void main(String[] args)
{
WebDriver driver = openBrowser("ie");
driver.get("https://www.baidu.com");
}
//多态:父类WebDriver接收子类返回对象:chromeDriver/firefoxDriver/ieDriver
public static WebDriver openBrowser(String browser) {
if(browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver", "src\main\resources\chromedriver.exe");
ChromeDriver chromeDriver = new ChromeDriver();
return chromeDriver;
}else if (browser.equalsIgnoreCase("firefox")) {
System.setProperty("webdriver.gecko.driver", "src\main\resources\geckodriver.exe");
FirefoxDriver firefoxDriver = new FirefoxDriver();
return firefoxDriver;
}else if (browser.equalsIgnoreCase("ie")) {
System.setProperty("webdriver.ie.driver", "src\main\resources\IEDriverServer.exe");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
@SuppressWarnings("deprecation")
InternetExplorerDriver ieDriver = new InternetExplorerDriver(capabilities);
return ieDriver;
}
return null;
}
}
版权归原作者 刘大晶 所有, 如有侵权,请联系我们删除。