zoukankan      html  css  js  c++  java
  • Appium之常用API

    Appium常用API解析

    1、current_activity:获取当前页面的activity名,比如com.taobao.tao.TBMainActivity 或 com.taobao.browser.BrowserActivity

    如判断当前页面是否为收藏夹:

    if driver.current_activity == "com.taobao.weex.WXActivity":
        pass

    2、page_source:返回页面的树形结构源码

    如通过断言判断是否进入某个页面(该页面包含特定内容信息)

    content = driver.page_source
    try:
        assert "我的淘宝" in content
    except Exception as e:
        raise e

    3、contexts:返回当前会话的上下文(可以用来识别native和H5混合页面)

    如在native和html5混合页面测试时,需要在native层和html5层切换,则首先需要得到context层的名称:

    print(driver.contexts)
    
    结果输出:
    ['NATIVE_APP', 'WEBVIEW_com.codoon.gps']
    
    然后使用driver.switch_to.context("NATIVE_APP"),就可以切换到native层了

    4、find_element_by_xxx:查找当前页面的一个元素

    ele = driver.find_element_by_name("foo")

    还可以使用如下:
    ele = driver.find_element(by="name", value="foo")

    5、find_elements_by_xxx:查找当前页面的多个元素

    eles = driver.find_elements_by_name("foo")

    还可以使用如下:
    eles = driver.find_elements(by="name", value="foo")

    6、click():点击(在移动端的时候,会有200~300ms的延迟)

    driver.find_element(by="xpath", value="//slhsjh").click()

    7、tap():在特定位置上轻击,并保持一定的时间(可以减少click在移动端的延迟,提高了性能)

    函数原型:tap(positions: List[Tuple[int, int]], duration: Optional[int] = None)
    
    driver.tap([(100, 20), (100, 60), (100, 100)], 500)

    click和tap都能实现单击的效果。其区别在于click是作用于driverelement的实例化对象,而tap是对屏幕上的坐标位置进行点击。前者对元素的位置变化并不敏感,而后者是针对具体的像素坐标点击,受分辨率和元素位置影响较大。

    8、send_keys():调用设备的系统输入法键盘,输入文本内容

    driver.find_element(by="xpath", value="//slhsjh").send_keys("Test")

    9、swipe()、flick():滑动,从[start_x, start_y]划到[end_x, end_y]的过程。

    区别:swipe比flick多了一个duration参数,有了这个参数就可以自定义从start到end动作的作用时间duration(单位为ms),以达到快速滑动或者慢速滑动的效果。

    函数原型:
    
    swipe(start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0)
    flick(start_x: int, start_y: int, end_x: int, end_y: int)
    
    driver.swipe(100, 100, 100, 400, 500)
    driver.flick(100, 100, 100, 400)

    TouchAction类

    TouchAction是APPium中封装的一个方法,主要是都手势控制的一些操作:点击、短按、长按、移动操作。

    导入模块:from appium.webdriver.common.touch_action import TouchAction

    TouchAction(driver):获取的是TouchAction对象

    TouchAction对象的操作方法

    release()和perform()方法一般跟添加的动作后面。

    (1)release():通过将指针离开屏幕(释放指针)来结束动作

    (2)perform():通过向服务器发送命令来执行动作

    from appium.webdriver.common.touch_action import TouchAction

    方法1:tap(element=None, x=None, y=None, count=1) ''' 模拟手势触摸元素或坐标点。 (1)element:要点击的元素 (2)x/y:移动到的屏幕坐标点,默认为空 ''' 方法2:press(el=None, x=None, y=None, pressure=None) ''' 模拟手势短按元素或坐标。 (1)el:要点击的元素 (2)x/y:移动到的屏幕坐标点,默认为空 (3)pressure:压力; [iOS只]按作为强制触摸 ''' 方法3:long_press(el=None, x=None, y=None, duration=1000) ''' 模拟手势长按元素或坐标点,持续duration时间。 (1)el:要点击的元素 (2)x/y:移动到的屏幕坐标点,默认为空 (3)duration:持续按压时间,单位为ms ''' 方法4:wait(ms=0) """ 模拟动作后的等待的时间。 """ 方法5:move_to(el=None, x=None, y=None) ''' 模拟从一个点移动到指定元素或指定点。 (1)el: 移动到的元素,默认为空 (2)x/y:移动到的屏幕坐标点,默认为空 ''' 方法6:release() ''' 通过将指针离开屏幕(释放指针)来结束动作。 ''' 方法7:perform() ''' 通过向服务器发送命令来执行动作。 ''' 例如: from appium import webdriver from appium.webdriver.common.touch_action import TouchAction ele = driver.find_element_by_xpath("//test") TouchAction(driver).tap(element=ele).release().perform() TouchAction(driver).tap(x=920, y=950).release().perform() TouchAction(driver).press(el=ele).release().perform() TouchAction(driver).long_press(el=ele).perform() TouchAction(driver).wait(100) TouchAction(driver).move_to(el=ele).release().perform()

    MultiTouch类

    MultiTouch类主要用于多点触控操作,可用于对界面执行放大、缩小操作。

    导入模块:from appium.webdriver.common.multi_action import MultiAction

     

    MultiAction(driver, element=None):获取的是MultiAction对象
    driver:操作的设备
    element:操作的元素,默认为None

    1. MultiAction对象的操作方法

    1.1、添加TouchAction对象到MultiAction对象

    (1)add(*touch_actions)

    touch_actions:1个或多个TouchAction对象(描述一个手指要执行的一系列动作)

    1.2、执行储存在对象中的所有动作

    (1)perform()

    当perform执行被调用时,添加到多点触摸的所有触摸动作都被发送到appium,并执行,就像它们同时发生一样。appium首先执行所有触摸动作的第一个事件,然后执行第二个......。

    # 初始化MultiAction对象
    MultiActionObject = MultiAction(driver)
    # 向MultiAction对象中添加动作
    touchAction1 = TouchAction(driver).press(x=100, y=200)
    touchAction2 = TouchAction(driver).press(x=100, y=300)
    MultiActionObject.add(touchAction1, touchAction2)
    # 执行操作
    MultiActionObject.perform()

    元素事件类API

    (1)reset():重置应用(类似删除应用数据)
    如通过driver.reset()来模拟实现首次登录app时出现的引导页需求:
    driver.reset()

    (2)is_app_installed():检查设备上是否已安装app,参数为package_name(appPackage)。返回True表示已安装,False表示未安装。

    如判断是否已安装淘宝app:

    if driver.is_app_installed("com.taobao.taobao"):
        '''参数为package_name(appPackage)'''
        pass
    else:
        pass
    (3)install_app():安装特定路径的app;参数为app的本地或远程路径。
    如若检测到未安装淘宝app,则安装该app:
    if driver.is_app_installed("com.taobao.taobao"):
        '''参数为package_name(appPackage)'''
        pass
    else:
        driver.install_app(r"E:AndroidTestase.apk")
    (4)remove_app():在设备上移除特定的app,参数为package_name(appPackage)。
    如测试旧版本兼容用例时,需要先卸载新版本,再安装旧版本:
    driver.remove_app("com.taobao.taobao_new")
    driver.install_app("com.taobao.taobao_old")
    (5)launch_app():在设备上启动desired capabilities中指定的app。
    driver.launch_app()
    (6)close_app():在设备上停止运行desired capabilities中指定的app。
    driver.close_app()

    (7)start_activity():在测试任务期间启动新的app活动,参数为appPackage和appActivity。

    driver.start_activity('com.tencent.mobileqq','com.tencent.mobileqq.activity.SplashActivity')
    print(driver.current_activity)

    (8)wait_activity():隐式等待某个activity出现,参数分别为目标activity、超时时间、检测间隔(单位均为s)。

    (类似于webdriver的WebDriverWait,且是Android特有的方法)

    如在后续操作需要在当前activity为主页的前提下:
    driver.wait_activity("homepage.activity", 15, 1)
    pass
    其它API
    (1)get_screenshot_as_file():截屏并保存在特定路径,参数为图片路径和图片名称。
    driver.get_screenshot_as_file('/Screenshots/foo.png')
    (2)get_attribute():获取已知元素控件的属性值,参数为控件。
    driver.find_element_by_xpath("//test").get_property("checkable")

    driver.find_element_by_xpath("//test").get_property("text")

    (3)background_app():将 app 置于后台,把当前应用放到后台去,参数为后台运行的时间,单位为s。

    driver.background_app(5)
    (4)pull_file():从设备中提取文件。
    driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')

    如在手机号注册时需要获取手机验证码,此时的实现方式是用另一个apk提取到验证码存在手机内存中,再用pull_file获取到验证码内容,使得appium可以将正确的验证码填入。

    (5)push_file():推送文件到设备中去

    driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')```
    (6)keyevent()、press_keycode():按键事件,向设备发送按键编码,参数为按键编码。(Android特有的方法)
    driver.keyevent(66)         # 回车键
    driver.press_keycode(3)     # Home键

    (7)hide_keyboard():收起键盘

    driver.hide_keyboard()

    (8)open_notifications():打开通知栏(仅Android特有)

    driver.open_notifications()

    (9)shake():模拟设备摇晃

    driver.shake()

     参考:https://www.jianshu.com/p/0e852c58609f

    参考:https://www.cnblogs.com/7chentest/p/6396551.html
  • 相关阅读:
    POJ 1330:Nearest Common Ancestors【lca】
    图论中一类问题的总结 :必须边(点) 可行边(点)
    POJ 1486 Sorting Slides【二分图匹配】
    POJ 2375 Cow Ski Area【tarjan】
    Unity打开AppStore进行评论
    Unity3D UGUI不规则图片点击事件处理
    Unity3D之聊天框怎么跟随内容大小而变换
    Unity3D之小物体层消隐技术
    Unity3D之新手引导(责任链模式)
    Unity3D之FSM有限状态机
  • 原文地址:https://www.cnblogs.com/Maruying/p/13608684.html
Copyright © 2011-2022 走看看