【Python】Appium-Python-Client库的介绍及用法

目录

1、应用场景

2、Appium-Python-Client-三方库


1、应用场景

Appium-Python-Client库主要用于自动化移动应用的测试,它是Appium自动化测试框架的Python客户端。以下是一些常见的应用场景:

  1. 原生应用测试: 这是Appium最主要的用途,可用于安卓和iOS平台上原生应用的测试。
  2. 移动网页应用测试: 可以测试在各种手机浏览器(如Chrome、Safari)或者Webview context中运行的网页。
  3. 混合应用测试: 混合应用指的是部分使用WebView(Web页面)编写,部分使用原生代码编写的应用,Appium可以在这两部分之间进行无缝切换和测试。
  4. 多设备测试: 可以连接多个设备或模拟器,并进行并行测试。
  5. 自动登录测试: 比如自动化测试微信、QQ、支付宝等应用的登录过程。
  6. 兼容性测试: 在多种设备、多个版本的系统上对App进行测试。
  7. 持续集成: 可以将Appium测试脚本与持续集成系统(如Jenkins)进行集成,实现自动化的测试流程。

2、Appium-Python-Client-三方库

Appium-Python-Client库主要被用来创建一个Appium的webdriver实例,并使用这个实例来操作移动应用。以下是库中一些常用的方法:

  • 初始化webdriver: 你需要传递给webdriver一个包含了连接信息和测试需求的字典,如平台类型、设备名、应用路径等。

    from appium import webdriver
    desired_caps = {
    'platformName': 'Android',
    'deviceName': 'emulator-5554',
    'app': '/path/to/your/apk/file',
    'automationName': 'UiAutomator2'
    }
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

  • 查找元素: Appium提供了多种方法来查找页面上的元素,例如通过id、name、class name、xpath等。

    element = driver.find_element_by_id('com.example:id/someId')
    element = driver.find_element_by_name('someName')
    element = driver.find_element_by_class_name('android.widget.TextView')
    element = driver.find_element_by_xpath('//android.widget.TextView[@text="Settings"]')

  • 操作元素: 查找到元素后你可以执行一些操作,如点击、输入文本、滑动等。

    element.click()
    element.send_keys('some text')
    driver.swipe(start_x, start_y, end_x, end_y)

  • 等待: 为了确保元素已经加载出来,你可以使用显示等待来等待元素出现。

    from appium.webdriver.common.mobileby import MobileBy
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((MobileBy.ID, 'com.example:id/someId'))
    )

  • 插件: 如果你需要使用Appium的一些高级功能,比如录制屏幕、手势操作等,你可能需要使用到Appium提供的一些插件。你可以直接调用这些插件的方法,如:

    driver.start_recording_screen()
    driver.stop_recording_screen()

  • 结束会话: 测试完成后,你需要调用quit方法来关闭与Appium服务器的连接。

    driver.quit()

这只是一些基本的使用方法,实际上Appium-Python-Client库提供了很多其他的方法来满足更复杂的测试需求。

除了上述方法,Appium-Python-Client库还有一些其他常见的使用方法:

  • 运行模拟器或真实设备上的应用:driver.launch_app()
  • 关闭当前运行的应用:driver.close_app()
  • 安装应用:driver.install_app('/path/to/your/apk/file')
  • 进行屏幕截图:driver.get_screenshot_as_file('screenshot.png')
  • 获取当前页面的XML源码,这对于分析页面结构十分有用:print(driver.page_source)
  • 切换上下文: 当测试的是混合应用时,可能需要在原生和webview之间进行切换:

print(driver.contexts) # 获取所有上下文

driver.switch_to.context('WEBVIEW') # 切换到WebView上下文

driver.switch_to.context('NATIVE_APP') # 切换回原生上下文

  • 多点触控操作,如缩放、旋转等:

from appium.webdriver.common.touch_action import TouchAction

from appium.webdriver.common.multi_action import MultiAction

action1 = TouchAction(driver).press(x=100, y=200)

action2 = TouchAction(driver).press(x=200, y=200)

multi = MultiAction(driver)

multi.add(action1, action2)

multi.perform()

这些都是一些常见的用法,但并不局限于此,具体的用法会根据测试需求进行选择和组合。

  • 在Appium-Python-Client的库中,提供了多种查找元素的方法:

    在Appium-Python-Client的库中,提供了多种查找元素的方法:
    通过元素的id查找:
    element = driver.find_element_by_id("element_id")

    通过元素的class name查找:
    element = driver.find_element_by_class_name("element_class_name")

    通过元素的XPath查找:
    element = driver.find_element_by_xpath("//tag[@attribute='value']")

    通过元素的name查找(元素的文本,即属性name="value"的值):
    element = driver.find_element_by_name("element_name")

    通过元素的tag name查找(标签名,如

    ,

    ,等):
    element = driver.find_element_by_tag_name('tag_name')

    通过链接的文字查找:
    element = driver.find_element_by_link_text('link_text')

    通过partial link的文字查找:
    element = driver.find_element_by_partial_link_text('partial_link_text')

    使用css选择器:
    element = driver.find_element_by_css_selector('css_selector')

    此外,以上的所有方法都有对应的find_elements...形式的方法,返回的是一个元素列表,而不是单个元素。例如:
    elements = driver.find_elements_by_class_name("element_class_name")

这些方法将返回一个元素列表,其中包含所有匹配的元素。注意如果没有元素匹配,find_element...方法将抛出一个NoSuchElementException异常,而find_elements...方法将返回一个空列表。

相关推荐
databook8 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar9 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780519 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_9 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机16 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机17 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i17 小时前
drf初步梳理
python·django
每日AI新事件17 小时前
python的异步函数
python