Appium自动化测试, 界面滑动(ios和android)

目的: 

滑动定位到手机页面上的某个元素

注意项

1. find_element()方法在ios和android上是有区别的:

        在ios上,需要滑动才可见的元素是可以通过find_element()找到的,无需滑页。

        而在android上,find_element()无法找到当前页面不可见的元素,必须滑页。

2. 要判断元素究竟是否存在, 对于ios可直接判断;但对于android,只能边滑边判断。 这样就还得判断是否滑到底了仍没有找到目标元素。

我在项目中的实现方式:

    def scroll_to_element(self, locator):
        """scroll down to the element located by locator

        :param locator: (strategy, locator_str) tuple used to find the element
        :return: True  - if element is found
                 False - if element is not found
        """
        if self.mobile_type == "IOS":
            return self.__scroll_to_element_ios(locator)
        elif self.mobile_type == "ANDROID":
            return self.__scroll_to_element_android(locator)

__scroll_to_element_ios里使用的基本方法:

    driver.execute_script('mobile: scroll', {'direction': 'down'})

__scroll_to_element_android里使用的基本方法:

    def __scroll_down(self):
        screen_size = self.driver.get_window_size()
        screen_width = screen_size['width']
        screen_height = screen_size['height']

        start_x = end_x = int(screen_width / 2)  
        start_y = int(screen_height * 0.8)  

        end_y = int(screen_height * 0.3)
        self.__drag(start_x, start_y, end_x, end_y) # 从屏幕高度的80%处滑到30%处  

    def __drag(self, start_x, start_y, end_x, end_y):
        """drag screen from (start_x, start_y) to (end_x, end_y)"""
        actions = ActionChains(self.driver)
        actions.w3c_actions.pointer_action.move_to_location(start_x, start_y)
        actions.w3c_actions.pointer_action.pointer_down()
        actions.w3c_actions.pointer_action.pause(1)
        actions.w3c_actions.pointer_action.move_to_location(end_x, end_y)
        actions.w3c_actions.pointer_action.release()
        actions.perform()

 android判断是否滑倒底了

    while before_scroll != after_scroll:
        before_scroll = self.driver.page_source
        self._drag(start_x, start_y, end_x, end_y)
        after_scroll = self.driver.page_source
        if self.is_displayed(locator):
            return True
        else:
            continue
    else:
        self.logger.exception(f'Already scrolled to the page bottom, element <{locator}> is not found.')
        return False

   这个方法有个弊端: 如果元素确实不存在, 滑到底后要再滑一次才能知道两次滑动页面没变

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值