app内嵌web网页的操作(WebView)
2020-03-01 本文已影响0人
清水秋香
查看webview中的网页元素
(appium使用13版本)
- 第一种情况:和测试应用webview不依赖app
方法一:直接用chrome浏览器F12里面的手机模式打开对应的网页
import time
from selenium import webdriver
#1打开电脑上的浏览器以手机模式运行
chrome_options = webdriver.ChromeOptions()
#2选择一种存在的模拟手机设备类型
chrome_options.add_experimental_option(
"mobileEmulation",
{"deviceName": "iPhone X"})
print(chrome_options.to_capabilities())
#启动webdriver 添加配置项
driver = webdriver.Chrome(desired_capabilities = chrome_options.to_capabilities())
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
time.sleep(1)
#设置浏览器窗口尺寸
driver.set_window_size(411,731)
element_keyword = driver.find_element_by_id("index-kw")
# 输入字符
element_keyword.click()
element_keyword.send_keys('松勤\n')
driver.quit()
方法二:使用手机浏览器打开
import time
from appium import webdriver
desired_caps={
#移动设备平台
'platformName':'Android',
'plathformVersion':'8',
'deviceName':'test0106',
#不需要指定包名和入口信息了,直接指定浏览器参数为Chrome,然后appium就会自动找到装的谷歌浏览器
'browserName':'Chrome',
'noReset':True,
'newCommandTimeout':6000,
'automationName':'UiAutomator2',
#使用指定的浏览器驱动-匹配手机上的谷歌浏览器 浏览器版本查找设置关于chrome
'chromedriverExecutableDir':'/Users/xxx/Desktop/xxx驱动'
}
#如果有其他浏览器(可以指定对应的驱动)自行获取package以及activity自行切换webview中
#自动化程序运行在手机上,自动化驱动装在电脑上
driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
#操作浏览器内容完全使用selenium的方式去自动化
driver.get('http://www.baidu.com/')
#用web查找元素的方式查找手机网页内部元素
time.sleep(3)
driver.find_element_by_id('index-kw').send_keys('xxx')
driver.find_element_by_id('index-bn').click()
- 第二种情况:被测应用webview与app原生有交互,依赖app
准备工作:修改应用源代码,添加webview调用
protected void onCreate(Bundle savedlnstanceState){
super.onCreate(savedlnstanceState);
WebView myWebView = (WebView)findViewById(R.id.jcywebview);
myWebView.setWebContentsDebuggingEnabled(true);
};
每个webview加入 myWebView.setWebContentsDebuggingEnabled(true); 代码,通常一个app里只有一个webview,添加一处即可
方法:通过chrome浏览器的远程调试功能
详细步骤:
确保被测app在手机上打开
打开chrome浏览器,地址栏输入
chrome://inspect
手机打开被测app 在chrome://inspect页面会显示WebView,点击inspect 则可进行查看
界面显示如下:
注意:有的系统比较老得,比如android4.4对应的webview的版本比较老,比如33.0的,可能不能inspect,所以可以使用新一些的android版本
from appium import webdriver
# 准备自动化配置信息
desired_caps = {
'platformName': 'Android',
'plathformVersion': '8',
'deviceName': 'test0106',
"appPackage": "com.example.jcy.wvtest",
"appActivity": ".MainActivity",
'noReset': True,
'newCommandTimeout': 6000,
'automationName': 'UiAutomator2',
'chromedriverExecutableDir': '/Users/wgz/Desktop/webview'
}
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
driver.implicitly_wait(10)
# 查看当前手的context appium把所有的界面环境称之为context
print(driver.contexts)
# 如果处于NATIVE_APP 原生app
if driver.current_context == 'NATIVE_APP':
# webview部分的context则为WEBVIEW_xxxx,应用app包名
driver.switch_to.context('WEBVIEW_com.example.jcy.wvtest')
# 此时可以操作web元素了
# driver.get('https://www.baidu.com/')
# 用web查找元素的方式查找手机网页内部元素
driver.find_element_by_id('index-kw').send_keys('松勤')
driver.find_element_by_id('index-bn').click()
res = driver.find_element_by_css_selector('#results>div:nth-child(1) header')
print(driver.current_context)
driver.switch_to.context('NATIVE_APP')
print(driver.current_context)
driver.find_element_by_accessibility_id('面板').click()