Selenium框架

原理:
driver可以理解为remoteserver。我们代码就是客户端。通过http交互信息。
如启动浏览器,代码和remoteserver建立连接生成一个seession用于交互,
driver用的是webdriver wire协议,把客户端代码转化成浏览器能识别的操作指令,相当于翻译器,从而驱动

 

Page Object:

Page Object将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。

 

自动化和手工

1.互补型,职能不同

2.测试工程师必须非常明确测试的核心价值是发现缺陷,自动化测试不能“创造性”地发现软件系统的缺陷,对于美观无能为力

3.自动化主要完成重复工作,智能判断,出具报告  编写+维护成本

 

框架特点:

1.       层级明确,每个层管理自己的东西,底层可以共用,减少资源浪费,层级间都有继承关系,调用方便,公用的资源都分装好,减少改动带来的效率低问题。

2.       实例化都放在底层,方便顶层调用,不需要再自己实例化

3.       稳定性,在底层管理元素已经做了是否存在html和是否display的等待,再在click的二次封装中确保能点击成功,do while

4.       每个项目都可以共用底层的东西,减少不必要的资源浪费。

5.       Log封装在底层,利于快速发现问题的来源

 

底层:启动浏览器,load对象,testng的实现如重跑,log的实例化,工具类(report),错误处理

api层:所有selenium的2次封装,公用函数,脚本

第三层:项目的公用脚本

第四层:case

 

稳定性:

1.       底层封装基础的等待(element要存在于html,isdisplayed)

2.       二次封装再加一次等待 用do while

3.       联系上下操作,看是否要加场景等待,如点了一个取消弹出框按钮,再去触发action右键,这时候必须加等待。 

 

遇到问题:

1.有些Lock按钮,点的时候会把一些输入框变成readonly,检查的东西会比较多。这时候用webdriver点一次有时候会不生效。

这时候需要写一个方法,注意到当按钮锁的时候,class为lock否则就是unlock,用do while,当class等于unlock会执行点击,当检查到class为lock的时候才break出循环。

2.alert这些最好加个判断,检查是否有alert才进行下一步操作。

3.不稳定,2层等待,第一层是看是否html存在此元素,第二层是isdispalyed看是否元素是hidden

 

 

显性等待,隐形等待:

1.       显性 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

可以封装在方法里面,对不同的操作修改等待时间

2.       隐性

500ms一次

WebDriverWait wait=new WebDriverWiat(driver,30);

(1)Wait.until(ExpectedConidtions.visibilityOfElementLocated、clickable)

(2)Wait.until(new Function<WebDriver,Boolean>)(){

Public Boolean apply(Webdriver driver)

}

 

自定义时间  FluentWait

Wait<WebDriver>wait=newFluentWait<WebDriver>(driver).withTimeout(5, TimeUnit.SECONDS).pollingEvery(1/10, TimeUnit.SECONDS);   

原文地址:https://www.cnblogs.com/season-xie/p/5330865.html