语法:find_element_by_定位方式(定位表达式)
两种定位表达式都可以:
driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search") driver.find_element_by_id("rl_home_top_search")
取 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()
driver.find_element_by_xpath("//android.widget.RadioButton[@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()
只适用于 webview 的 html 页面,继承自 webdriver,与 pc 版本的 UI 测试一致。
driver.find_element_by_css_selector()
只适用于 webview 的 html 页面,继承自 webdriver,与 pc 版本的 UI 测试一致。
driver.find_element_by_link_text()
webview 容器中的 html 页面可以用 name 定位,native 并没有 name 属性。
driver.find_element_by_name()
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()
# 点击(也可以用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()
# 获取当前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、文本,或者列表是否为空等等。
与 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
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()
driver.press_keycode(KEYCODE)
下面提供 Android keycode 参考表:
电话键
控制键
组合键
基本
原文:https://www.cnblogs.com/juno3550/p/14648908.html