Appium基础操作

1.uiautomatorviewer

1.手机控件查看工具uiautomatorviewer

        简介:用来扫描和分析Android应用程序的UI空间的工具

2.如何使用

        1.进入SDK目录下的tools目录,打开uiautomatorviewer

        2.电脑连接真机或模拟器

        3.启动待测试app

        4.点击uiautomatorviewer的左上角Device Screenshot,回生成app当前页面的UI控件截图

如下:

就可以浏览该控件的id、class、text等

2.APP元素定位操作

1.appium常用元素定位方式

   2.通过id定位

  代码实现:
      driver.find_element_by_id("com.android.settings:id/search").click()
      driver.quit()

 3.通过class定位

    代码实现:
        # id 点击搜索按钮
        driver.find_element_by_id("com.android.settings:id/search").click()
        # class 点击输入框返回按钮
        driver.find_element_by_class_name('android.widget.ImageButton').click()
        driver.quit()

  

4.通过xpath定位

    代码实现:
        # xpath 点击WLAN按钮
        driver.find_element_by_xpath("//*[contains(@text,'WLA')]").click()

 5.通过id方式定位一组元素(element -> elements)

        应用场景为元素值重复,无法通过元素属性直接定位到某个元素,只能通过elements

        方式来选择,返回一个定位对象的列表

 代码实现:
        # 定位到一组元素
        title = driver.find_elements_by_id("com.android.settings:id/title")
        # 打印title类型,预期为list
        print(type(title))
        # 取title返回列表中的第一个定位对象,执行点击操作
        title[0].click()

 6.WebDriverWait 显示等待操作

        在一个超时范围内,每个一段时间去搜索一次元素是否存在,如果存在返回定位对象,

        如果不存在知道超时时间到达,报超时异常错误

  方法:WebDriverWait(driver, timeout, poll_frequency).until(method)
    参数:
        1.driver:手机驱动对象
        2.timeout:搜索超时时间
        3.poll_frequency:每次搜索间隔时间,默认时间为0.5s
        4.method:定位方法(匿名函数)
  匿名函数: 
        lambda x: x
    等价于python函数:
        def test(x):
            return x

3.app元素信息操作api

 1.发送数据到输入框

  代码实现:
        # 点击搜索按钮
        driver.find_element_by_id("com.android.settings:id/search").click()
        # 定位到输入框并输入abc
        driver.find_element_by_id("android:id/search_src_text").send_keys("abc")

 2.获取元素的文本内容

 代码实现:
      text_vlaue = driver.find_elements_by_class_name("android.widget.TextView")
      for i in text_vlaue:
          print(i.text)

 

 3.获取元素的属性值

  代码实现:
      # 定位到搜索按钮
      get_value = driver.find_element_by_id("com.android.settings:id/search")
      print(get_value.get_attribute("content-desc"))

 4.获取元素在屏幕上的坐标

 代码实现:
      # 定位到搜索按钮
      get_value = driver.find_element_by_id("com.android.settings:id/search")
      # 打印搜索按钮在屏幕上的坐标
      print(get_value.location)

5.获取app包名和启动名

  print(driver.current_package)
      print(driver.current_activity)

4.app元素时间操作api

 1.swip滑动事件

从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动
  方法:swipe(start_x, start_y, end_x, end_y, duration=None)
  参数:
      1.start_x:起点X轴坐标
      2.start_y:起点Y轴坐标
      3.end_x:  终点X轴坐标
      4.end_y,: 终点Y轴坐标
      5.duration: 滑动这个操作一共持续的时间长度,单位:ms
  代码实现:
      # 滑动没有持续时间
      driver.swipe(188,659,148,248)
      # 滑动持续5秒的时间
      driver.swipe(188,659,148,248,5000)

2.scroll滑动事件

 从一个元素滑动到另一个元素,直到页面自动停止
  方法:scroll(origin_el, destination_el)
  参数:
      1.origin_el:滑动开始的元素
      2.destination_el:滑动结束的元素
  代码实现:
      # 定位到存储菜单栏
      el1 = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
      # 定位到WLAN菜单栏
      el2 = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
      # 执行滑动操作
      driver.scroll(el1,el2)

 5.app模拟手势高级操作

1.手指轻敲操作

 模拟手指轻敲一下屏幕操作
  方法:tap(element=None, x=None, y=None)
  方法:perform() # 发送命令到服务器执行操作
  参数:
      1.element:被定位到的元素
      2.x:相对于元素左上角的坐标,通常会使用元素的X轴坐标
      3.y:通常会使用元素的Y轴坐标
 代码实现:
      # 通过元素定位方式敲击屏幕
      el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
      TouchAction(driver).tap(el).perform()

      # 通过坐标方式敲击屏幕,WLAN坐标:x=155,y=250
      # TouchAction(driver).tap(x=155,y=250).perform()

2.手指按操作

  方法:press(el=None, x=None, y=None)
  方法:release() # 结束动作,手指离开屏幕
  参数:
      1.element:被定位到的元素
      2.x:通常会使用元素的X轴坐标
      3.y:通常会使用元素的Y轴坐标
  代码实现:
      # 通过元素定位方式按下屏幕
      el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
      TouchAction(driver).press(el).release().perform()

      # 通过坐标方式按下屏幕,WLAN坐标:x=155,y=250
      # TouchAction(driver).press(x=155,y=250).release().perform()

 3.等待操作

 方法:wait(ms=0)
  参数:
      ms:暂停的毫秒数
  代码实现:
      # 点击WLAN
      driver.find_element_by_xpath("//*[contains(@text,'WLAN')]").click()
      # 定位到WiredSSID
      el =driver.find_element_by_id("android:id/title")
      # 通过元素定位方式长按元素
      TouchAction(driver).press(el).wait(5000).perform()

      # 通过坐标方式模拟长按元素
      # 添加等待(有长按)/不添加等待(无长按效果)
      # TouchAction(driver).press(x=770,y=667).wait(5000).release().perform()

4.手指滑动操作

  模拟手机的滑动操作
  方法:move_to(el=None, x=None, y=None)
  参数:
      1.el:定位的元素
      2.x:相对于前一个元素的X轴偏移量
      3.y:相对于前一个元素的Y轴偏移量
    代码实现:
        # 定位到存储
        el = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
        # 定位到更多
        el1 = driver.find_element_by_xpath("//*[contains(@text,'更多')]")
        # 元素方式滑动
        TouchAction(driver).press(el).move_to(el1).release().perform()
        # 坐标的方式滑动
        # TouchAction(driver).press(x=240,y=600).wait(100).move_to(x=240,y=100).release().perform()
        # 注意press连接一个move_to实际调用的是swip方法,可在log中查询,不要给相对坐标。

 业务场景:

        1.进入设置

        2.向上滑动屏幕到可见“安全选项”

        3.进入到安全

        4.点击屏幕锁定方式

        5.点击图案

        6.绘制图案

猜你喜欢

转载自blog.csdn.net/ng_elza/article/details/121020926