#encoding=utf-8
'''
'''
#driver新建
driver=webdriver.Remote('http://localhost:4723/wd/hub',caps) #关闭driver
driver.quit() #find_element_by_id
box=driver.find_element_by_id('com.xsteach.appedu:id/rl_home_top_search')
box=driver.find_element_by_id('rl_home_top_search') #class_name driver.find_element_by_class_name('android.widget.TextView') #这个方式获取到的是一个列表
driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')[2] #xpath
driver.find_element_by_xpath("//android.widget.RadioButton[@text='个人中心']") #text 同className方式,结果是一个list
driver.find_elements_by_android_uiautomator('new UiSelector().text("个人中心")') #textContains 不是list
driver.find_element_by_android_uiautomator('new UiSelector().textContains("中心")').click() #正则匹配 不是list
driver.find_element_by_android_uiautomator('new UiSelector().textMatches(".*的课程.*")').click() #*******************webview定位类似frame的操作方式**************** #link_text
driver.find_element_by_link_text('新闻')
driver.find_element_by_name('') #android原生页面没有name属性 #find_element(by,value)
from selenium.webdriver.common.by import By
driver.find_element(By.ID,'kw') cateid_locator=(By.ID,"ag2")
driver.find_element(*cateid_locator).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 #find_elements_by_class_name 返回列表
driver.find_elements_by_class_name("android.widget.TextView")[10].click() #先找到元素一 再继续查找元素二
driver.find_element_by_class_name(“xxx”).find_element_by_name(“yyy") #清空clear
driver.find_element_by_id('editText').clear() #***************左右上下滑动屏幕(x*3/4,y/4,x/4,y/4)************
#表示起始点坐标、终点坐标,参照点左上角
#左滑
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
driver.swipe(x*3/4,y/4,x/4,y/4) #右滑
driver.swipe(x/4,y/4,x*3/4,y/4) #下滑(与上滑有可能反了)
driver.swipe(x/4,y/4,x/4,y*3/4) #上滑
driver.swipe(x/4,y*3/4,x/4,y/4) #**********TouchAction 类似ActionChains********** #滑动页面(解锁密码可以用) 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
driver.current_activity #屏幕高宽,字典
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 #截屏
driver.get_screenshot_as_file(filepath) #断言
assert '建筑设计' in driver.page_source #*********键盘事件*********** #模拟点击返回键
driver.press_keycode(4) appium可以借助pc端selenium的物理按键代码来操作。
driver.press_keycode() 括号内填入pc端键盘的代号 #键盘事件操作
driver.keyevent(66) #电话键 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 ************************小例子*************************
#某教育app的例子 from appium import webdriver
import time
caps = {}
caps["appPackage"] = "com.xsteach.appedu"
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
caps["platformName"] = "Android"
caps["platformVersion"] = '6.0.1'
caps["deviceName"] = '3HX0217115011233'
caps["unicodeKeyboard"] = True
caps["autoAcceptAlerts"] = True #对权限弹窗进行授权
caps["resetKeyboard"] = True
caps["noReset"] = True
caps["newCommandTimeout"]=6000 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) #获取手机屏幕大小,返回字典 {'width': 720, 'height': 1280}
size = driver.get_window_size()
print(size) print(driver.is_app_installed("com.xsteach.appedu")) #关闭app
driver.close_app() driver.quit() #***************************模拟某教育APP 搜索操作************************** from appium import webdriver
import time
caps = {}
caps["appPackage"] = "com.xsteach.appedu"
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
caps["platformName"] = "Android"
caps["platformVersion"] = ''
caps["deviceName"] = '3HX0217115011233'
caps["unicodeKeyboard"] = True
caps["autoAcceptAlerts"] = True #对权限弹窗进行授权
caps["resetKeyboard"] = True
caps["noReset"] = True
caps["newCommandTimeout"]=6000 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) #获取手机大小{'width': 1080, 'height': 1808}
size = driver.get_window_size()
print(size) # 查看指定包名的app是否已经按照
print(driver.is_app_installed("com.xsteach.appedu")) #driver.start_activity('com.xsteach.appedu', '.StartActivity')
# 打印一下当前页面的activity
print(driver.current_activity)
time.sleep(5)
uList = driver.find_elements_by_android_uiautomator("new UiSelector().text(\"个人中心\")")
print(uList[0].text) box=driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search")
box.click()
time.sleep(2) box=driver.find_element_by_id("com.xsteach.appedu:id/editText")
time.sleep(2)
box.send_keys("python")
time.sleep(4) driver.find_element_by_id("com.xsteach.appedu:id/item_tv_dynamic_search_result").click() #随便选了一个下拉结果点击选择
time.sleep(3) #关闭app
driver.close_app() #2、也可以跳过某些场景,达到某个页面
# element = driver.find_element_by_android_uiautomator('new UiSelector().text("新用户")')
# element.click()
print(driver.current_activity)
ele = driver.start_activity('com.xsteach.appedu', '.StartActivity')
print(driver.current_activity)
time.sleep(5)
box=driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search")
box.click()
time.sleep(2) box=driver.find_element_by_id("editText")
time.sleep(1)
box.send_keys("设计")
time.sleep(3)
box.clear()
box.send_keys("编程")
driver.find_element_by_id("tv_Text").click() ******************************登录的完整例子******************************* from appium import webdriver
import time
import os
caps = {}
caps["appPackage"] = "com.xsteach.appedu"
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
caps["platformName"] = "Android"
caps["platformVersion"] = ''
caps["deviceName"] = '3HX0217115011233'
caps["unicodeKeyboard"] = True
caps["autoAcceptAlerts"] = True #对权限弹窗进行授权
caps["resetKeyboard"] = True
caps["noReset"] = True
caps["newCommandTimeout"]=6000 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) #等待5秒
driver.implicitly_wait(5) person_center =driver.find_element_by_id("content_rb_mine")
#person_center = driver.find_elements_by_android_uiautomator("new UiSelector().text(\"+个人中心\")")
person_center.click() log_in = driver.find_element_by_id("tvLogin")
log_in.click()
driver.find_element_by_id("etUser").send_keys("fosterwu")
driver.find_element_by_id("etPwd").send_keys("gloryroad123")
driver.find_element_by_id("btnLogin").click()
time.sleep(3)
driver.close_app() *****************************chrome百度搜索的一个例子***************************
#注意chrome 与chromedriver的版本匹配问题
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md #chromedriver版本替换
http://blog.sina.com.cn/s/blog_6a8557730102y17x.html from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait import time,os
url='https://www.baidu.com'
desired_caps = {
'platformName': 'Android',
'deviceName': '3HX0217115011233',
'platformVersion': '',
'noReset': True,
'browserName':'Chrome',
"newCommandTimeout": ""
} driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
print('浏览器启动成功')
driver.get("http://www.baidu.com")
#time.sleep(2)
#华为手机,会弹出个权限的系统提示框,执行两次回车动作可以取消掉。
driver.keyevent(66)
driver.keyevent(66)
try:
WebDriverWait(driver,10,1).until(lambda x:x.find_element_by_xpath("//input[@id='index-kw']")).send_keys("光荣之路") #xpath 定位如何获取到的
time.sleep(5)
driver.keyevent(66)
except Exception as err:
pass
driver.keyevent(66)
time.sleep(5)
assert "光荣之路" in driver.page_source driver.close_app() https://www.cnblogs.com/helenMemery/p/7346485.html desired_caps['recreateChromeDriverSessions'] = True启动时,这个参数也加上,他这是每到一个webview页面就重新创建一个driver,要不然定位找不到 1.手机端打开需要获取的webview页面
2. pc端chrome浏览器地址栏中输入:chrome://inspect/#devices,定位元素 但是需要翻墙,如果能翻墙,就可以加载出来
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
:
这个是appium在GitHub上对webview和chromedriver版本的说明 报stableObject异常时候,加个sleep. 切换webview的操作,没有查到怎么切换回去,可以先记录一下 之前的contexts,再切回之前的
网上查到了这个:
self.driver.switch_to.context()
如果是从App转到web的话()填"WEBVIEW_1",
如果web转到App的话填"NATIVE_APP" contexts = driver.contexts
print contexts
c = contexts[1]
print c
driver.switch_to.context(c)
now = driver.current_context
print (now)

appium webdriver 基本操作及小例子等的更多相关文章

  1. Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子

    Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...

  2. 这42个Python小例子,太走心

    告别枯燥,60秒学会一个Python小例子.奔着此出发点,我在过去1个月,将平时经常使用的代码段换为小例子,分享出来后受到大家的喜欢. 一.基本操作 1 链式比较 i = 3print(1 <  ...

  3. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  4. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  5. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  6. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  7. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  8. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  9. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

随机推荐

  1. Andrew Ng机器学习课程10

    Andrew Ng机器学习课程10 a example 如果hypothesis set中的hypothesis是由d个real number决定的,那么用64位的计算机数据表示的话,那么模型的个数一 ...

  2. tracert详解

    1tracert作用 是用于探索源地址到目标地址当中所经过的路线.而每到达一个点,就会向源地址返回一个信号.例如A要访问D,那么当中经过B,再经过C.当经过B时,会向A返回一个信号,当经过C时,再向A ...

  3. Python 访问一个网址之后输入信息进行检索

    window Python 3 Pycharm软件 from selenium import webdriver #导入Selenium的webdriver from selenium.webdriv ...

  4. 原生xgboost中如何输出feature_importance

    网上教程基本都是清一色的使用sklearn版本,此时的XGBClassifier有自带属性feature_importances_,而特征名称可以通过model._Booster.feature_na ...

  5. LeetCode 674. 最长连续递增序列(Longest Continuous Increasing Subsequence) 18

    674. 最长连续递增序列 674. Longest Continuous Increasing Subsequence 题目描述 给定一个未经排序的整型数组,找到最长且连续的递增序列. Given ...

  6. 第五章 模块之 struct、dis、正则表达式、异常处理

    5.15 struct模块 pack 能够把所有的数字都固定的转换成4字节 5.16 dis dis.dis 查看计算机指令 5.16 正则表达式 基础 正则表达式概念: 是一种规则(元字符,量词) ...

  7. WUSTOJ 1320: 饭卡(Java)动态规划-背包

    题目链接:

  8. 机器学习之softmax回归笔记

    本次笔记绝大部分转自https://www.cnblogs.com/Luv-GEM/p/10674719.html softmax回归 Logistic回归是用来解决二类分类问题的,如果要解决的问题是 ...

  9. CentOS6.8 克隆

    克隆 克隆前,先将上面安装好并且设置好的系统关机 (1) 右键centos -->管理->克隆->下一步->下一步->完整克隆 ->克隆名称起名有意义点就行-> ...

  10. 如何实现在H5里调起高德地图APP

    这一篇文章将告诉您,如果直接打开高德地图APP,并展示路线规划.适合有定位的移动设备,可以查询到从“我的位置”到目的地的路径规划,并直接导航. 场景二.调起高德地图的路线规划功能 导航是目前JSAPI ...