关于定位工具,Appium Inspector,uiautomatorviewer,weditor 都定位不到X5内核的程序。
X5内核调试工具腾讯也不支持了。使用Chrome://inspect需要翻墙,UC的工具我下载发现也是404。
后来我想既然我appium可以操作控制 小程序,那就把源码直接打印出来。
先通过webdriver.contexts找到小程序context,再切换到用switch_to.context切换到小程序里面。
from time import sleep
from appium import webdriver
import pytest
class Test_xingtu():
def test_xingtu_charge_ElectricBicycle(self):
desired_caps = {
"platformName": "Android", # 手机系统
"platformVersion": "9", # 手机系统版本
"deviceName": 'HUAWEI', # 手机的名字,不会进行校验,但是没有会报错
"appPackage": "com.tencent.mm", # app包名
# "appActivity": "com.tencent.mm.app.WeChatSplashActivity", # app的启动页面
"appActivity": ".ui.LauncherUI", # 微信首页
"noReset": True,
'automationName': 'Uiautomator2',
'chromeOptions': {'androidProcess': 'WEBVIEW_com.tencent.mm:appbrand0'}
}
wd = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 元素定位
wd.implicitly_wait(5)
sleep(1)
wd.find_element(by='xpath',value="//*[@text='发现']").click()
wd.find_element(by='xpath',value="//*[@text='小程序']").click()
wd.find_element(by='xpath',value="//*[@text='星途']").click()#小程序名称
print(wd.contexts)#通过这里找到要切换的小程序context
wd.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')#切换到小程序
print(wd.window_handles)#进入小程序再切换到要使用的window
wd.switch_to.window(wd.window_handles[0])#进入小程序再切换到要使用的window
print(wd.page_source)
进入小程序再切换到要使用到的window
print(wd.window_handles)#打印当前的window
wd.switch_to.window(wd.window_handles[0])#进入小程第一个window
最后把页面源码打印出来
print(wd.page_source)
把页面源码copy到html一个里面。再用浏览器打开就可以定位到元素了
也可写一个方法把源码写入到html 再打开因为我不是频繁使用,copy到源码就直接用了,还有小程序里面的window每次使用ID都不是固定的,所以只能按顺序去找window。网上找到一些可以用wd.window_handles[0].title() 的方式写循环去定位要切换的window。但是我用的小程序发现.title()都是空的所以没办法定位