第十期_appium page object 实战_20190901

Page Object基本概念

Page Object封装

主流程

  • install app , first start app
  • start app
  • start activity
  • testcases
    def __init__(self):
        if XueqiuPage.driver==None:
            self.first_start()
        else:
            print("launch")
            self.driver.start_activity(self.app, self.activity)

        self.find((By.ID, "user_profile_icon"))
        # WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located((By.ID, "user_profile_icon")))

处理异常弹框

  • 自定义find 智能化的等待
    def find(self, locator):
        #todo: 处理弹框 异常处理 动态浮动的元素的处理

        try:
            self.driver.find_element(*locator)
        except Exception as e:
            #黑名单处理
            if BasePage.max>3:
                raise e
            BasePage.max=BasePage.max+1
            for black in self.black_list:
                elements=self.driver.find_elements(*black)
                if len(elements)>=1:
                    elements[0].click()

            self.find(locator)

不推荐teardown

  • 如果遇到异常无法很好的收尾,会影响后续用例执行

绕开验证

处理短信验证码

  • 不推荐
  • 如果一定要用,让研发加万能码
  • 如果研发支持不了,其实也是可以用app自动化
  • 或者root过的红米手机,读取短信数据库
  • 写一个agent,监听短信并发送到一个公共服务器用于读取,比如redis 数据库之类的

读取短信

    def test_notification(self):
        self.driver.open_notifications()
        sleep(3)
        print(self.driver.page_source)
        self.driver.keyevent(4)
        self.driver.launch_app()

如果绕过验证

  • 第三方登陆

PO实战

  • 登陆
  • 行情
  • 自选
  • 完善你的find策略
  • 完善主流程加载
  • 数据驱动
  • allure

把github的地址发出来,把allure的报告截图贴到回复里

关闭