java selenium自动化测试工具包介绍
最开始做自动化的时候自己封装了一些工具类,把一些元素、driver的操作做了封装,所以就把这个项目叫做testUtils(测试工具)
。
但最近看到一篇虫师的文章,他实现了一个python的poium测试库,核心是基于Page Objects实现元素定位的封装。看完之后,发现用这个测试库的话定位元素,元素操作都变得非常简洁,并且清晰明了。
由于我一直用的是java做自动化开发,并早就烦恼于java各种类库的引用与代码的繁琐,所以我就想java能不能也封装出相似的测试库呢。几经思索,终于想通了一些细节,并着手实现了框架。
实现此框架的原则:
- 使用此框架之后代码必须简洁
- 必须与IDE有较高的契合度,各项操作能自动补全代码
- 对同一个对象的多次操作最好能一句代码实现。
基于以上原则,封装了Element
Assertion
PageTemp
类,其中
Element
是对WebElement
的封装,使用它对元素的操作及定位都会简单一些。PageTemp
是Page Objects模式的页面元素集合。Assertion
是一些断言方法的封装,暂时实现了一部分,后续应该会实现Selenium IDE的所有断言。并且此处断言可以链式调用。
实现的特性
- 相对于selenium的8种定位方式,增加了“文本”定位 和“包含文本”定位。如:
new Element().text("文本内容")
new Element().containText("包含的文本")
- 针对iframe内的元素做特殊处理,只要给元素设置iframe属性后,之后对此元素的操作可以直接调用。如:
Element iframe = new Element().name("iframe");
Element element = new Element().iframe(iframe).text("example");
元素操作:element.click();
省去了繁琐的driver与frame上下文切换操作 - 未元素增加了一个父元素属性(pElement),设置pElement之后,查找元素会从pElement内查找。如:
Element pEle = new Element().name("pElement");
Element cEle = new Element().pElement(pEle).name("cElement");
- 对多选元素封装了多个方法,可直接调用,免除了新建Select类的操作。
- 对Element简单实现了几个断言方法,可直接使用。如:
ele.assert_equalsText("expectText");
不过还是建议建议使用Assertion进行断言。 - 封装了一个断言类(Assertion),同一用例中可连续调用,即使断言失败也会继续执行后面的代码,只有在调用
Assertion.end()
才会判断用例是否成功。如:
//dosomething
Assertion.start().assertTitle(driver,"expectTitle")
//dosomething
Assertion.assertLocation(driver,"expectUrl").end();//最后一次断言
框架使用示例
page类
import com.jaque.Element;
import com.jaque.factory.PageTemp;
import org.openqa.selenium.WebDriver;
public class PageTempTest extends PageTemp {
public PageTempTest