编写ui自动化——运行失败问题总结

看了一下之前的内容觉得比较乱,现在重新整理一下:

首先运行失败问题可以分为两类,稳定复现的失败,无法定位、点击,偶现的运行失败。

 

对于每次都必现的情况,肯定是系统bug,或者编写的ui自动化有问题,这时就需要考虑几个方面:

1、点击的时机是否正确,是否等待时长不够;

2、新开页面了,记得切换handle句柄。有弹框为iframe时,需要switch to iframe。或者先将网页拉到最下面,再xpath定位点击。

3、定位的元素是否正确,是否为可点击的元素?是否应该定位该元素的上级/下级元素?元素表面是否有蒙层?

4、定位方法写对没有,是click的elements还是element,如果同时定位到多个的话,需要指定到单个;

5、是否操作过程中,页面元素出现变化:排序变化,属性值变化等等;

6、尽量使用xpath进行定位,xpath不好定位时,考虑id定位、键盘操作downkey、enterkey、tab键;

7、是否需要先鼠标悬停进行激活?

8、或者使用robot方法,模拟鼠标移动到页面某个像素点位置进行操作(缺点:运行非常不稳定)

 

对于偶现的运行失败,考虑是稳定性的问题,需要优化运行方式,增强稳定性:

1、首先最好手动操作能复现,这样可以找到偶现失败的原因,有时就是系统本身的bug,手动可以复现之后,更容易找到解决办法,当然没复现也可以进行其他尝试;

2、显性等待、隐性等待都有的情况下,仍可能出现页面元素加载未成功的情况,可以再加上sleep,硬性等待;

3、打开某一个页面后,再刷新一次,再进行等待;

4、改变assert判定方式或者改变判定元素;

5、每个用例运行完成后,重新开关浏览器,避免一个用例失败后,之后的步骤均无法执行的情况;

6、修改定位方式!(8大定位方式):id定位、name定位、class name定位、tag定位、link定位、partialLink定位、xpath定位、css定位。

By LinkText()方法,是对一个的网页超链接,我们所需要输入的关键字为该超链接的所有文字。

       By PartialLinkText()方法,看到part这个单词我们就可以知道,当这个文字超链接太长时,我们不想输入那么多的字,就可以调用这个方法,主要输入属于这个超链接文字的部分就可以了。当然,为了防止因为文字出现位置太多,定位失败,建议选择的字符要有唯一性。

 

 

 

xpath定位技巧

1、对于不好定位的元素,尽量不要使用parent等方式找父级、兄级进行定位,可以使用contains,或者加[1][2][3]进行定位;

举例:String a="//div[contains(@class,'style_Titles') and contains(.,'数据服务')]";

 

2、不包含某个属性的元素,例:定位一个没有style属性的div元素下面的span:

//div[not(@style)]/span

 

3、   //button[contains(.,'立即报价')] 与 //button[contains(text(),'立即报价')]的区别:

第一个匹配,button元素内部,任一层级,有文本属性包含'立即报价'的,均把该button元素选择出来;
第二个仅匹配,直接有文本属性包含'立即报价'的button元素。

 

4、xpath路径中传入参数;

public void clickButtonByNumber(String Number){
twd.click(findBy.xpath,"//td[text()='"+number+"']//following-sibling::td//span[text()='查看']");
}

5、列表定位元素无法点击:有两层div,一层inner,一层outer,就是一层模板样式,一层具体数据覆盖模板样式,有时精确定位仅定位到outer,模板样式中的元素,所以无法点击到inner

解决方法一:通过模糊定位方式同时找到outer和inner的元素,比如一页十列数据,有10个查看,会定位到20个,再加上排序,去点击。

解决方法二:通过outer元素中的列表唯一订单号,反推出inner元素的列表序列号,再通过列表序列号,找到对应的列表操作按钮。

 

6、由于页面加载过慢,导致加10s等待也不成功,可以使用判断加循环。举例,场景描述:四步点击后进入详情页

因为第四步基本不会出现点击不成功的问题,所以这里第四步没有写循环

 

posted @ 2021-01-18 11:34  hushuer  阅读(589)  评论(0编辑  收藏  举报