appium自动化手机网页
学习笔记整理:
APP主要有三种开发模式,NativeAPP,WebAPP,HybirdAPP。
我们用Appium做App Ui自动化时,主要步骤是定位元素,对元素操作,操作结果处理。
其中webAPP,比如Chrome搜索百度,然后用UI Automator Viewer打开后,是无法定位页面元素的,如下图,是一整块。
此时可以利用浏览器的手机模式打开百度页面进行元素定位。
一、电脑上自动化手机模式的网页
参考代码:
#不需要appium
import time
from selenium import webdriver
#配置浏览器以手机模式启动
chrome_options=webdriver.ChromeOptions()
#选择一种存在的模拟手机设备
chrome_options.add_experimental_option('mobileEmulation',{'deviceName':'iPhone X'})
driver=webdriver.Chrome(desired_capabilities=chrome_options.to_capabilities())
driver.get('http://www.baidu.com')
driver.find_element_by_id('index-kw').send_keys('松勤\n')
time.sleep(1)
driver.quit()
二、.手机端浏览器运行自动化网页:
1.手机端需要安装chrome
2.电脑端需要下载和手机端Chrome对应版本的Chromedriver。
需要注意的是,Chromedriver的版本是和PC端系统一致的,如果是window系统,就下win版本的,如果是mac,下载mac版本,和手机系统没有关系。
我用的是mac,所以需要下载mac版本的以80开头的chromedriver。
版本对应关系:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
国内下载地址:https://npm.taobao.org/mirrors/chromedriver
参考代码:
import time
from appium import webdriver
desired_Caps={
'platform':'Android',
'platformVersion':'6.0',
'deviceName':'emulator-5554',
#如果是Chrome浏览器,不需要appPackage和appActivity属性。
'browserName':'Chrome',
#这里的XXX是Chromedriver的路径,还有另外一个chromedriverExecutable,这个需要带上文件名
'chromedriverExecutableDir':'XXXX',
'noRest':True,
'newCommandTimeout':6000,
'automationName':'UiAutomator2'
}
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_Caps)
driver.get('http://www.baidu.com')
driver.find_element_by_id('index-kw').send_keys('松勤\n')
time.sleep(1)
driver.quit()
三、嵌套在App内部的网页(hybirdApp)
1.修改源码,开启webviewdebug
WebView.setWebContentsDebuggingEnabled(true)
一般找开发帮忙改一下打个包。
好像有使用xposed强制打开,可以参考https://www.cnblogs.com/jiuyigirl/p/7372558.html,我没试过,先Mark下。
2.查看webview元素
打开Chrome浏览器,地址栏输入chrome://inspect
点击inspect,需要*才能看到,然后可以定位元素。
3.下载对应版本的webdriver,应该是52版本
方法一:在手机设置里搜索webview实现(有的手机搜不到)
方法二:可以通过运行代码报错方式找到,desired_caps中不添加chromedriverExecutableDir,运行时控制台会报错
方法三:Chrome://inspect那里应该也是能看到的
参考代码:
import time
from appium import webdriver
desired_caps={
#移动设备平台
'platformName':'Android',
#平台OS版本号
'plathformVersion':'6',
#设备的名称--值可以随便写
'deviceName':'emulator-5554',
#提供被测app的信息-包名,入口信息
'appPackage':'com.example.jcy.wvtest',
'appActivity':'com.example.jcy.wvtest.MainActivity',
# 'browserName':'Chrome',
'chromedriverExecutableDir':'XXX',
#确保自动化之后不重置app
'noReset':True,
#设置session的超时时间,单位秒
'newCommandTimeout':6000,
'automationName':'UiAutomator2'
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)
#查看所有contexts
print(driver.contexts)
#webview的context一般为WEBVIEW_包名
driver.switch_to.context('WEBVIEW_com.example.jcy.wvtest')
time.sleep(1)
driver.find_element_by_id('index-kw').send_keys('松勤\n')
#切回原生
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_accessibility_id('通知').click()
上一篇: Dell笔记本重装Win10系统
下一篇: json 在 js 中的转换问题