App自动化测试:等待webview页面数据加载完成

App自动化测试:等待webview页面数据加载完成

一、适用场景

     App自动化测试时,经常有混合H5页面的测试场景,该场景下通过Python+Appium自动化测试时用到的方法,与Python+Selenium进行Web端自动化测试时用到的方法相同,都是继承于WebDriver。

比如元素的三大显示等待:

    1、表示元素被加载  presence_of_element_located()

    2、表示元素可以被看见  visibility_of_element_located()

    3、等待元素可以被点击  element_to_be_clickable()

上面三种常用的显示等待能基本满足自动化测试需要,但也有特殊场景无法满足的,如下:

   App自动化测试:等待webview页面数据加载完成

     需求:在商品详情页点击“立即购买”,可以购买该商品成功。(该页面是App内嵌的webview页面)

     在App自动化测试过程中,当进入上面的商品详情页时,需要加载大量的详情数据。但是“立即购买”按钮先于详情数据加载完成,所以此时点击“立即购买”按钮时,页面会无任何反应或有错误提示,导致自动化测试过程中断。

     通常的解决办法是设置显示等待,查找某个元素加载完成后,再点击“立即购买”按钮。但存在一个缺陷是,不知道等待商品详情页面的哪个元素,因为详情页的元素太多,且每次加载情况还不相同。此时需要一个通用的方法,等待页面所有的数据加载完成,而不管是什么数据。

二、解决办法

     selenium的page_source方法可以获取到页面源码,页面在加载数据时源码都是在持续更新的,当页面数据加载完成时源码就不会再更新,因此我们可以封装一个方法,在源码不再更新时执行下一步操作。

     封装的方法如下:

1     def wait_data_load(self):
2         old_page = ‘‘
3         new_page = self.driver.page_source
4         while old_page != new_page:
5           self.swipe_up()
6             # time.sleep(0.3)
7             old_page = new_page
8             new_page = self.driver.page_source
9         my_log.info("webview页面数据加载完成")

      代码中self.swipe_up() 是自己封装的向上滑动手机屏幕的方法,也可以不用该方法,使用time.sleep(0.3)强制等待。

      上面的方法经本人试用后,一劳永逸的解决了webview页面,需要等待所有数据加载完成的问题。

App自动化测试:等待webview页面数据加载完成

上一篇:用ps中的溶化滤镜制作橡皮溶化之后的效果


下一篇:Vue axios封装使用技巧