• 09.05移动端appium基础操作


    导入driver对象

      from appium import webdriver

     导入手机启动参数

    注:获取appPackage 和 appActivity可使用adb命令

        adb shell dumpsys window w |findstr \/ |findstr name=
        adb shell dumpsys window | findstr mCurrentFocus

    1. caps = {}
    2. caps["deviceName"] = "127.0.0.1:7555"
    3. caps["platformName"] = "Android"
    4. caps["appPackag"] = "com.android.settings"
    5. caps["appActivity"] = "com.android.settings.Settings"

    脚本内启动其它app

        driver.start_activity(appPackage,appActivity)

     关闭app

     driver.close_app()  # 关闭当前操作的app,不会关闭驱动对象

     关闭驱动对象

    driver.quit()   # 关闭驱动对象,同时关闭所有关联的app

     代码:

    1. from appium import webdriver
    2. import time
    3. #server启动参数
    4. caps = {}
    5. #设备信息
    6. caps["deviceName"] = "127.0.0.1:7555"
    7. caps["platformName"] = "Android"
    8. #app信息
    9. caps["appPackag"] = "com.android.settings"
    10. caps["appActivity"] = "com.android.settings.Settings"
    11. driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
    12. driver.implicitly_wait(30)
    13. time.sleep(5)
    14. driver.quit()

    1.APP元素定位操作

    1.1Appium常用元素定位方式

    1.1.1前置代码 

    1. from appium import webdriver
    2. import time
    3. #server启动参数
    4. caps = {}
    5. #设备信息
    6. caps["deviceName"] = "127.0.0.1:7555"
    7. caps["platformName"] = "Android"
    8. #app信息
    9. caps["appPackag"] = "com.android.settings"
    10. caps["appActivity"] = "com.android.settings.Settings"
    11. driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

    1.1.2通过id定位

      方法:find_element_by_id(id_value) # id_value:为元素的id属性值
    1. 业务场景:
    2. 1.进入设置页面
    3. 2.通过ID定位方式点击搜索按钮

     代码:

    1. #点击设置
    2. driver.find_element_by_id("com.android.settings:id/search").click()

    1.1.3通过class定位

    1. 业务场景:
    2. 1.进入设置页面
    3. 2.点击搜索按钮
    4. 3.通过class定位方式点击输入框的返回按钮

    代码

    1. #点击设置
    2. driver.find_element_by_id("com.android.settings:id/search").click()
    3. #点击返回
    4. driver.find_element_by_class_name('android.widget.ImageButton').click()

    1.1.4通过xpath定位

    1. *** android端xptah常用属性定位:
    2. 1. id ://*[contains(@resource-id,'com.android.settings:id/search')]
    3. 2. class ://*[contains(@class,'android.widget.ImageButton')]
    4. 3. text ://*[contains(@text,'WLA')]
    5. *** 模糊定位 contains(@key,value): value可以是部分值

     场景: 1进入设置页面

               2.点击WLAN菜单栏

    代码:

    1. #点击wlan
    2. driver.find_element_by_xpath('//*[contains(@text,"WLAN")]').click()

    1.1.5通过class方式定位一组元素

    场景:1进入设置页面

            2.点击WLAN菜单栏(class定位对象列表中第三个)

    代码:

    1. #定位一组元素
    2. aa=driver.find_element_by_class_name('android.widget.TextView')
    3. #打印数据查看
    4. print(type(aa))
    5. #取出对应的值点击
    6. aa.click()

    1.1.6发送数据到输入框

     场景: 1进入设置页面

               2点击搜索框

               3.输入1234

    代码:

    1. #点击搜索
    2. driver.find_element_by_xpath(' //android.widget.TextView[@content-desc="搜索设置"]').click()
    3. #输入内容1234
    4. driver.find_element_by_id('android:id/search_src_text').send_keys(1234)

    1.1.7清空输入框内容

    方法:clear()

     场景: 1进入设置页面

               2点击搜索框

               3.输入1234

               4.删除已输入的1234

    代码:

    1. #点击搜索
    2. driver.find_element_by_xpath(' //android.widget.TextView[@content-desc="搜索设置"]').click()
    3. #输入内容1234
    4. aa=driver.find_element_by_id('android:id/search_src_text')
    5. aa.send_keys(1234)
    6. time.sleep(2)
    7. #删除1234
    8. aa.clear()

    1.1.8获取元素的文本内容

    方法 text

    业务场景:

            1.进入设置

            2.获取所有元素class为android.widget.TextView的文本内容

    代码:

    1. text=driver.find_elements_by_class_name('android.widget.TextView')
    2. for i in text:
    3. print(i.text)

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

    方法:location

    业务场景:

            1.进入设置页面

            2.获取搜索按钮在屏幕的坐标位置

    代码:

    1. #定位到搜索按钮
    2. aa=driver.find_element_by_id("com.android.settings:id/search")
    3. #打印搜索按钮在屏幕坐标
    4. print(aa.location)

    结果:

    1.1.9swipe滑动事件

    1. ⚠️从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动
    2. 方法:swipe(start_x, start_y, end_x, end_y, duration=None)
    3. 参数:
    4. 1.start_x:起点X轴坐标
    5. 2.start_y:起点Y轴坐标
    6. 3.end_x: 终点X轴坐标
    7. 4.end_y,: 终点Y轴坐标
    8. 5.duration: 滑动这个操作一共持续的时间长度,单位:ms

     业务场景:

            1.进入设置

            2.从坐标80,1188 滑到80,249

     代码:

    1. #从坐标80,1188 滑到80,249
    2. driver.swipe(80,1188,80,249,duration=1000)

    1.1.10scroll滑动事件

    业务场景:

            1.进入设置

            2.模拟手指将存储菜单滑动到WLAN菜单栏位置

      代码:

    1. #定位存储菜单栏
    2. e11=driver.find_element_by_xpath("//*[contains(@text,'存储设备和 USB')]")
    3. #定位到WLAN菜单栏
    4. el2=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
    5. #执行滑动操作
    6. driver.scroll(e11,el2)

    1.1.11drag拖拽事件

    业务场景:

            1.进入设置

            2模拟手指将存储菜单滑动到WLAN菜单栏位置

    代码:

    1. #定位存储菜单栏
    2. e11=driver.find_element_by_xpath("//*[contains(@text,'存储设备和 USB')]")
    3. #定位到WLAN菜单栏
    4. el2=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
    5. #执行滑动操作
    6. driver.drag_and_drop(e11,el2)

    1.1.12手指轻敲操作

    业务场景:

            1.进入设置

            2点击WLAN选项

    1. #通过元素定位方式敲击屏幕
    2. el=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
    3. TouchAction(driver).tap(el).perform()

    1.1.13手指按操作

    业务场景:

            1.进入设置

            2点击WLAN选项

    1. #通过元素定位方式敲击屏幕
    2. el=driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
    3. TouchAction(driver).tap(el).release().perform()
    4. #通过坐标方式按下屏幕x=155,y=250
    5. TouchAction(driver).press(x=155,y=250).release().perform()

    1.1.14手指移动操作

    业务场景:

            1.进入设置

            2.点击安全

            3.点击屏幕锁定方式

            4.绘制图案

    1. #往下滑动
    2. driver.swipe(160,684,160,221,duration=1000)
    3. #点击安全
    4. driver.find_element_by_xpath('//*[contains(@text,"安全")]').click()
    5. #点击屏幕
    6. driver.find_element_by_xpath('//*[contains(@text,"屏幕锁定方式")]').click()
    7. #绘制图案 1032,236 890,375 747,527 1029,527
    8. TouchAction(driver).press(x=1032,y=236).wait(100).move_to(x=890,y=375).wait(100).move_to(x=747,y=527).wait(100).move_to(x=1029,y=527).wait(100).release().perform()

  • 相关阅读:
    智能驾驶感知技术的综述与展望
    企业所得税分析与预测
    ISP图像信号处理——白平衡校正和标定介绍以及C++实现
    前后端分离项目,vue+uni-app+php+mysql教室预约系统设计与实现(H5移动项目)
    Nmap安装和使用详解
    C++ 求幂函数pow()的输出问题
    基于antd实现动态修改节点的Tree组件
    越权漏洞知识点
    文心一言 VS 讯飞星火 VS chatgpt (118)-- 算法导论10.3 3题
    如何实现该图的遍历算法
  • 原文地址:https://blog.csdn.net/qq_57411925/article/details/126708776