Appium 常用 API

1. 定位方式

2. 页面操作

3. 获取界面属性、控件属性

4. 截屏

5. 打开与关闭 APP

6. 键盘事件

 

 

1. 定位方式

语法:find_element_by_定位方式(定位表达式)

通过 id 定位

两种定位表达式都可以:

driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search")
driver.find_element_by_id("rl_home_top_search")

通过 class_name 定位

取 class 的内容:

# 方式1
driver.find_element_by_class_name("android.widget.TextView")

# 方式2
driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')[2].click()

通过 xpath 定位

driver.find_element_by_xpath("//android.widget.RadioButton[@text='个人中心']")

通过 text 定位

需要使用 uiautomator 的定位方式:

# 获取单个text元素对象
driver.find_element_by_android_uiautomator("new UiSelector().text(\"个人中心\")")

# 获取多个text元素对象并使用索引
driver.find_elements_by_android_uiautomator("new UiSelector().text(\"个人中心\")")[0].click()

# 部分文字匹配
driver.find_element_by_android_uiautomator('new UiSelector().textContains("中心")').click()

# 正则匹配
driver.find_element_by_android_uiautomator('new UiSelector().textMatches(".*的课程.*")').click()

通过 css_selector 定位

只适用于 webview 的 html 页面,继承自 webdriver,与 pc 版本的 UI 测试一致。

driver.find_element_by_css_selector()

通过 link_text 定位

只适用于 webview 的 html 页面,继承自 webdriver,与 PC 版本的 UI 测试一致。

driver.find_element_by_link_text()

通过 name 定位

webview 容器中的 html 页面可以用 name 定位,native 并没有 name 属性。

driver.find_element_by_name()

find_element(by, value)

find_element_by_方式(value) 实际调用的都是 find_element(by,value)

需要导入这个包:from selenium.webdriver.common.by import By

# 方式一:
driver.find_element_by_id("ag2”)
# 方式二:
driver.find_element(By.ID,"ag2")
 
# 这个方式的好处是可以直接把操作的 by 和 value 放到一个元组里,然后调用通用方法来传参获得元素结果
cateid=(By.ID, "ag2")
driver.find_element(*cateid).click()

By 操作

  • By.ID 相当于 by_id
  • By.CLASS_NAME 相当于 by_class_name
  • By.XPATH 相当于 by_xpath
  • By.NAME 相当于 by_name
  • By.TAG_NAME 相当于 by_tag_name
  • By.CSS_SELECTOR 相当于 by_css_selector
  • By.LINK_TEXT 相当于 by_link_text

 

2. 页面操作

# 点击(也可以用tab实现点击操作)
box = driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search").click()


# 清空
driver.find_element_by_id("editText").clear()


# 上下左右滑动
'''左滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x*3/4, y/4, x/4, y/4)

'''右滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/4, y/4, x*3/4, y/4)

'''下滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/2, y*3/4, x/2, y/4)

'''上滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/2, y/4, x/2, y*3/4)


# 滑动界面
from appium.webdriver.common.touch_action import TouchAction

def test_scroll_down(driver):
    screen = driver.get_window_size()
    action = TouchAction(driver)
    action.press(x=screen['width']/2,y=screen['height']/2)
    action.move_to(x=0,y=-screen['height']/10)
    action.release()
    action.perform()

 

3. 获取界面属性、控件属性

# 获取当前Activity名称
activity = driver.current_activity

# 获取屏幕宽高
creen = driver.get_window_size()

# 获取控件文本
mobile_name.get_attribute('text')  # 或者 mobile_name.text

# 获取控件类名
mobile_name.get_attribute('className')

# 判断控件是否显示
mobile_name.is_displayed()  # 或者 mobile_name.get_attribute('displayed')

# 获得控件位置
mobile_name.location

# 获得控件大小
mobile_name.size

# 查找控件子结点
parent.find_elements_by_class_name('android.widget.TextView')

同理:查找控件的方法也适用于查找子节点。对于交互后的验证,无法验证到具体的数据内容,可以验证当前的 Activity、文本,或者列表是否为空等等。

 

4. 截屏

与 selenium webdriver 的 API 一致:

def take_screenshot():
    global DRIVER
    # 创建当前日期目录
    dir = os.path.join(EXCEPION_PIC_PATH, get_chinese_date())
    if not os.path.exists(dir):
        os.makedirs(dir)
    # 以当前时间为文件名
    file_name = get_chinese_time()
    file_path = os.path.join(dir, file_name+".png")
    try:
        DRIVER.get_screenshot_as_file(file_path)
        # 返回截图文件的绝对路径
        return file_path
    except:
        print("截图发生异常【{}】".format(file_path))
        traceback.print_exc()
        return file_path

 

5. 打开与关闭 APP

from appium import webdriver


# 配置Appium会话(Session),告诉Appium服务器需要自动化的平台和APP
desired_caps = {}
desired_caps['platformName'] = 'Android'  # 手机操作系统
desired_caps['platformVersion'] = '7.1.1'  # 手机操作系统版本号
desired_caps['deviceName'] = 'xxxxxxxxx'  # 设备名称(通过adb获取)
desired_caps['appPackage'] = 'com.android.bbkcalculator'  # APP包名
desired_caps['appActivity'] = '.Calculator'  # APP最先启动的Activity(窗体)


# 打开APP,返回webdriver对象
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  # 连接appium server(需先启动appium server)


# 退出APP
driver.quit()

 

6. 键盘事件

driver.press_keycode(KEYCODE)
  • Appium 可以借助 PC 端 Selenium 的物理按键代码来操作
  • KEYCODE 为 PC 端键盘的代号,如模拟点击返回键为 driver.press_keycode(4)

下面提供 Android keycode 参考表:

电话键

  • KEYCODE_CALL 拨号键 5
  • KEYCODE_ENDCALL 挂机键 6
  • KEYCODE_HOME 按键Home 3
  • KEYCODE_MENU 菜单键 82
  • KEYCODE_BACK 返回键 4
  • KEYCODE_SEARCH 搜索键 84
  • KEYCODE_CAMERA 拍照键 27
  • KEYCODE_FOCUS 拍照对焦键 80
  • KEYCODE_POWER 电源键 26
  • KEYCODE_NOTIFICATION 通知键 83
  • KEYCODE_MUTE 话筒静音键 91
  • KEYCODE_VOLUME_MUTE 扬声器静音键 164
  • KEYCODE_VOLUME_UP 音量增加键 24
  • KEYCODE_VOLUME_DOWN 音量减小键 25

控制键

  • KEYCODE_ENTER 回车键 66
  • KEYCODE_ESCAPE ESC键 111
  • KEYCODE_DPAD_CENTER 导航键 确定键 23
  • KEYCODE_DPAD_UP 导航键 向上 19
  • KEYCODE_DPAD_DOWN 导航键 向下 20
  • KEYCODE_DPAD_LEFT 导航键 向左 21
  • KEYCODE_DPAD_RIGHT 导航键 向右 22
  • KEYCODE_MOVE_HOME 光标移动到开始键 122
  • KEYCODE_MOVE_END 光标移动到末尾键 123
  • KEYCODE_PAGE_UP 向上翻页键 92
  • KEYCODE_PAGE_DOWN 向下翻页键 93
  • KEYCODE_DEL 退格键 67
  • KEYCODE_FORWARD_DEL 删除键 112
  • KEYCODE_INSERT 插入键 124
  • KEYCODE_TAB Tab键 61
  • KEYCODE_NUM_LOCK 小键盘锁 143
  • KEYCODE_CAPS_LOCK 大写锁定键 115
  • KEYCODE_BREAK Break/Pause键 121
  • KEYCODE_SCROLL_LOCK 滚动锁定键 116
  • KEYCODE_ZOOM_IN 放大键 168
  • KEYCODE_ZOOM_OUT 缩小键 169

组合键

  • KEYCODE_ALT_LEFT Alt+Left
  • KEYCODE_ALT_RIGHT Alt+Right
  • KEYCODE_CTRL_LEFT Control+Left
  • KEYCODE_CTRL_RIGHT Control+Right
  • KEYCODE_SHIFT_LEFT Shift+Left
  • KEYCODE_SHIFT_RIGHT Shift+Right

基本

  • KEYCODE_0 按键’0’ 7
  • KEYCODE_1 按键’1’ 8
  • KEYCODE_2 按键’2’ 9
  • KEYCODE_3 按键’3’ 10
  • KEYCODE_4 按键’4’ 11
  • KEYCODE_5 按键’5’ 12
  • KEYCODE_6 按键’6’ 13
  • KEYCODE_7 按键’7’ 14
  • KEYCODE_8 按键’8’ 15
  • KEYCODE_9 按键’9’ 16
  • KEYCODE_A 按键’A’ 29
  • KEYCODE_B 按键’B’ 30
  • KEYCODE_C 按键’C’ 31
  • KEYCODE_D 按键’D’ 32
  • KEYCODE_E 按键’E’ 33
  • KEYCODE_F 按键’F’ 34
  • KEYCODE_G 按键’G’ 35
  • KEYCODE_H 按键’H’ 36
  • KEYCODE_I 按键’I’ 37
  • KEYCODE_J 按键’J’ 38
  • KEYCODE_K 按键’K’ 39
  • KEYCODE_L 按键’L’ 40
  • KEYCODE_M 按键’M’ 41
  • KEYCODE_N 按键’N’ 42
  • KEYCODE_O 按键’O’ 43
  • KEYCODE_P 按键’P’ 44
  • KEYCODE_Q 按键’Q’ 45
  • KEYCODE_R 按键’R’ 46
  • KEYCODE_S 按键’S’ 47
  • KEYCODE_T 按键’T’ 48
  • KEYCODE_U 按键’U’ 49
  • KEYCODE_V 按键’V’ 50
  • KEYCODE_W 按键’W’ 51
  • KEYCODE_X 按键’X’ 52
  • KEYCODE_Y 按键’Y’ 53
  • KEYCODE_Z 按键’Z’ 54

 

posted @ 2021-04-12 17:04  Juno3550  阅读(315)  评论(0编辑  收藏  举报