• 手机自动化测试:4.通过appium inspector 获取相关app的信息,以某团为例,点击,搜索,获取数据等。


    0.使用inspector时,一定要把不相关的如weditor啥的退出去,否则,净是事。

    1.从0开始的数据获取

     第一个位置,有时0.0.0.0,不可以的话,你就用这个。

    第二个位置,抄上。

    直接点击第三个启动。不要问为什么,问就是。我也不知道。

    第一个错误:它说得有个平台名,好吧。

    错误
    Failed to create session. An unknown server-side error occurred while processing the command. Original error: You must include a platformName capability

    添上

    注意一定要添上如下

    "appium:automationName": "UiAutomator2"

    再次启动。OK了进来了。

     再次提醒,版本不一样,出错不一样,你根据出错的地方完善就可以。

    2.获取某团相关

     自动点击手机上的某团,打开它。

     一个一个的点复制。

    1. 'getCurrentActivity' "com.meituan.android.pt.homepage.activity.MainActivity"
    2. 'getCurrentPackage' "com.sankuai.meituan"

     返回修改

    1. {
    2. "appium:platformName": "Android",
    3. "appium:automationName": "UiAutomator2",
    4. "appium:appPackage": "com.sankuai.meituan",
    5. "appium:appActivity": "com.meituan.android.pt.homepage.activity.MainActivity"
    6. }

     其他信息模仿吧。

    通过adb获取信息

    1. C:\Users\Administrator>adb shell dumpsys activity | findstr "mResume"
    2. mResumedActivity: ActivityRecord{1fef505 u0 com.sankuai.meituan/com.meituan.android.pt.homepage.activity.MainActivity t1097}

     形成测试代码:

    1. from appium import webdriver
    2. from appium.options.android import UiAutomator2Options
    3. desired_caps = {
    4. "platformName": "Android",
    5. "platformVersion": "10",
    6. "deviceName": "Q5X7N19605002672",
    7. "appium:appPackage": "com.sankuai.meituan",
    8. "appium:appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
    9. "unicodeKeyboard": True,
    10. "resetKeyboard":True,
    11. "noReset":True,
    12. "appium:newCommandTimeout": 6000,
    13. "appium:automationName": "UiAutomator2"
    14. }
    15. if desired_caps is not None:
    16. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', options=UiAutomator2Options().load_capabilities(desired_caps))
    17. else:
    18. raise ValueError("desired_caps must not be None")

     运行成功。

    用inspector进行附加。

    利用代码启动某团,一定要利用pycharm中的代码进行,否则无效,原理很简单。就是通过appium互动留下的信息进行启动的。

    再次刷新附加

    界面示例:

    3.点击某个元素、输入文本、搜索等。

    点击超市便利为例:

     

     有一个结果,点击一下。看手机是否正常反映

    有反映,记录之

    (//android.widget.ImageView[@resource-id="com.sankuai.meituan:id/channel_icon"])[5]

     输入商店名称进行搜索:以下记得刷新,否则你明白 的。信息不准。

    方法同上。

    输入框定位后,点击一下。

    //android.widget.LinearLayout[@resource-id="com.sankuai.meituan:id/minutes_animte_action_search"]/android.widget.LinearLayout[1]

    进入新窗口

    通过应用源一级级定位到最低级的编辑框位置。输入想要搜索的关键词。

    //android.widget.EditText[@resource-id="com.sankuai.meituan:id/txt_search_keyword"]

    如下图:

    定位搜索按钮。

    //android.widget.LinearLayout[@resource-id="com.sankuai.meituan:id/search_tv"]

    来到以下页面。

    点击排名第一个商店,进入商店 

     通过应用源一级级的定位,不再多说。

    (//android.widget.FrameLayout[@resource-id="com.sankuai.meituan:id/mach_container_wrapper"])[2]

    来到如图:

    4.根据以上查证结果,生成py文件,进行自动操作。

    提醒,以上其实是XPATH定位,不是最推荐的,但目前,用这个就行。

     以下代码,完整无伤通过。

    1. from appium import webdriver
    2. from appium.options.android import UiAutomator2Options
    3. desired_caps = {
    4. "platformName": "Android",
    5. "platformVersion": "10",
    6. "deviceName": "Q5X7N19605002672",
    7. "appium:appPackage": "com.sankuai.meituan",
    8. "appium:appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
    9. "unicodeKeyboard": True,
    10. "resetKeyboard":True,
    11. "noReset":True,
    12. "appium:newCommandTimeout": 6000,
    13. "appium:automationName": "UiAutomator2"
    14. }
    15. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', options=UiAutomator2Options().load_capabilities(desired_caps))
    16. # 设置超时时间和重试间隔
    17. timeout = 10
    18. poll_frequency = 1
    19. from selenium.webdriver.common.by import By
    20. from selenium.webdriver.support.ui import WebDriverWait
    21. from selenium.webdriver.support import expected_conditions as EC
    22. ####################### 点击超市便利########################################################
    23. element = WebDriverWait(driver, timeout, poll_frequency).until(
    24. EC.element_to_be_clickable((By.XPATH, '(//android.widget.ImageView[@resource-id="com.sankuai.meituan:id/channel_icon"])[5]'))
    25. )
    26. element.click()
    27. ######################### 点击搜索框########################################################
    28. element = WebDriverWait(driver, timeout, poll_frequency).until(
    29. EC.element_to_be_clickable((By.XPATH, '//android.widget.LinearLayout[@resource-id="com.sankuai.meituan:id/minutes_animte_action_search"]/android.widget.LinearLayout[1]'))
    30. )
    31. element.click()
    32. ##################### 使用显式等待定位并输入文本############################################################
    33. try:
    34. search_box = WebDriverWait(driver, timeout, poll_frequency).until(
    35. EC.presence_of_element_located((By.XPATH, "//android.widget.EditText[@resource-id='com.sankuai.meituan:id/txt_search_keyword']"))
    36. )
    37. search_box.send_keys("优小优")
    38. except Exception as e:
    39. print(f"无法找到或操作元素: {e}")
    40. ########################## 点击搜索按钮#########################################################
    41. element = WebDriverWait(driver, timeout, poll_frequency).until(
    42. EC.element_to_be_clickable((By.XPATH, '//android.widget.LinearLayout[@resource-id="com.sankuai.meituan:id/search_tv"]'))
    43. )
    44. element.click()
    45. ########################## 点击排名第一的商店#########################################################
    46. element = WebDriverWait(driver, timeout, poll_frequency).until(
    47. EC.element_to_be_clickable((By.XPATH, '(//android.widget.FrameLayout[@resource-id="com.sankuai.meituan:id/mach_container_wrapper"])[2]'))
    48. )
    49. element.click()

     

     希望你也能一次无伤通过。

    下一节,打算获取其商品数据。并保存之。 

  • 相关阅读:
    SpringSecurity-三更草堂-学习笔记
    二刷 K8s 源码 - workqueue 的所有细节
    【C++ 构造函数和析构函数:对象生命周期的关键】
    Hadoop、Hive、Spark 之间的关系
    JAVA毕业设计web开发数码产品推荐平台系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
    Python: 一步之遥
    oracle的使用sqlplush
    回归测试:意义、挑战、最佳实践和工具
    JAVA设计模式-单例模式
    高性能对象存储minio
  • 原文地址:https://blog.csdn.net/weixin_42771529/article/details/139487170