0


Selenium1:搭建自动化测试环境

Selenium IDE/我的第一个web自动化程序 2020/4/28 周二 64-66

0 Selenium: 驱动浏览器做自动化测试

官网:https://www.selenium.dev/

分三块:

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;

}

}


本文转载自: https://blog.csdn.net/weixin_48029567/article/details/128792688
版权归原作者 刘大晶 所有, 如有侵权,请联系我们删除。

“Selenium1:搭建自动化测试环境”的评论:

还没有评论