Selenium框架
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);