selenium中有提供pageObject,支持将页面元素和动作单独封装到一个类中。
但是,当页面元素发生变化的时候(在项目的维护过程中,很很容易发生的),就需要去修改源代码。为了解决这个问题,可以实现一套完全解耦的简单测试框架。
该框架的主要思想,是 将各个测试页面的定位信息存放到xml中,解析后的xml信息映射到相应的类中。当页面定位信息改变的时候,只需修改xml文件即可。
下面是项目框架:
base:用来存放一些测试初始化操作以及对selenuim部分功能的2次封装,之后会上代码。
pageLocator:用来存放一个页面定位器的类,该类包含by、value、desc三个属性。方便将页面定位元素的信息映射到我们这个类上。
testCase:测试用例
util:帮助类。存放 如之前博客中封装的getDriver等
下面是该框架的具体实现:
1.先使用maven引入各jar包
selenium、TESTNG(管理用例)、log4j(记录日志)、dom4j(解析xml)、poi(读取excel)。下面是笔者的pom.xml
1 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.claire.leafly</groupId> 4 <artifactId>projectLemon</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <dependencies> 7 8 <dependency> 9 <groupId>org.seleniumhq.selenium</groupId> 10 <artifactId>selenium-java</artifactId> 11 <version>3.4.0</version> 12 </dependency> 13 14 <!-- https://mvnrepository.com/artifact/org.testng/testng --> 15 <dependency> 16 <groupId>org.testng</groupId> 17 <artifactId>testng</artifactId> 18 <version>6.9.10</version> 19 <scope>test</scope> 20 </dependency> 21 22 <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> 23 <dependency> 24 <groupId>dom4j</groupId> 25 <artifactId>dom4j</artifactId> 26 <version>1.6.1</version> 27 </dependency> 28 29 30 <!-- https://mvnrepository.com/artifact/log4j/log4j --> 31 <dependency> 32 <groupId>log4j</groupId> 33 <artifactId>log4j</artifactId> 34 <version>1.2.17</version> 35 </dependency> 36 37 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> 38 <dependency> 39 <groupId>org.apache.poi</groupId> 40 <artifactId>poi-ooxml</artifactId> 41 <version>3.17</version> 42 </dependency> 43 44 </dependencies> 45 <build> 46 <plugins> 47 <!-- 1:解决每次右键项目名-maven->update project 时候,项目jdk版本变了,变回1.5版本或者其他版本 48 2: 解决使用maven编译其他问题:如提示不能在内部类访问外部非final局部变量 49 --> 50 <plugin> 51 <groupId>org.apache.maven.plugins</groupId> 52 <artifactId>maven-compiler-plugin</artifactId> 53 <version>3.5.1</version> 54 <configuration> 55 <source>1.8</source> 56 <target>1.8</target> 57 <encoding>UTF-8</encoding> 58 </configuration> 59 </plugin> 60 </plugins> 61 </build> 62 63 </project>