测试场景
启动钉钉app进入工作H5页面,点击考勤签到
查看webview上元素
1.电脑上打开chrome浏览器输入:chrome://inspect/#devices
2.Discover USB devices这个要勾选的,可以检查到手机设备
3.Discover network targets 这个勾选,检查到网络
4.下图箭头指向的,是手机的设备名称
5.Webview in com.alibaba.android.rimet(39.0.00)这个是手机上浏览器的内核版本号39
(一般电脑上的chrome版本号最好要大于等于这个版本号)
1.上图红色框框的两个地址就是加载到的webview的网页地址了,点地址下的inspect按钮,进入调试界面
(当然没有*爬的同学,打开是一片空白的,你懂得)
2.不会爬*的也没关系,把对应的url地址复制出来,重新打开一个浏览器标签,输入地址后,按F12也可以进调试界面。
3.接下来的元素定位就跟selenium的定位是一回事了。
代码实践:
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
import time
desired_caps = {
#android的apk
'platformName': 'Android',
#手机设备名称
'deviceName': '127.0.0.1:21503',
#android系统的版本号
'platformVersion': '5.1.1',
# 'deviceName': 'ceshi',
# 'platformVersion': '7.0',
# 'udid':'83f04b4b5338424e', # 'app':r'C:\Users\bzART\Desktop\app-artmall-release.apk',
# apk包名
'appPackage': 'com.alibaba.android.rimet',
# apk的launcherActivity
'appActivity': 'biz.home.activity.HomeActivity',
#默认neReset为false,不要在会话前重置应用状态,每次启动都跟第一次启动一样,变为true则不一样
'noReset':'True',
#下面两行代码是为了屏蔽软件盘以至于可以输入中文
'unicodeKeyboard':True,#使用unicode编码方式发送字符串
'resetKeyboard':True#将键盘隐藏起来
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
WebDriverWait(driver,8).until(lambda x:x.find_element_by_id('com.alibaba.android.rimet:id/home_bottom_tab_button_work'))
driver.find_element_by_id('com.alibaba.android.rimet:id/home_bottom_tab_button_work').click() WebDriverWait(driver,8).until(lambda x:x.find_element_by_class_name('android.webkit.WebView'))
#获取所有的环境
contexts=driver.contexts
print(contexts)
time.sleep(10)
#切换到webview
driver.switch_to.context('WEBVIEW_com.alibaba.android.rimet')
#获取当前的环境,看是否切换成功
print(driver.current_context) time.sleep(20)
#点击考勤签到
driver.find_element_by_xpath('//*[@id="dingapp"]/div/div[4]/div[1]/div[2]/div/div[3]/div/div[2]/p').click() #切换回native
driver.switch_to.context("NATIVE_APP")
# driver.switch_to.context(contexts[0])