android微信小程序自动填表_微信小程序自动化,记录趟过的坑!
項(xiàng)目思想:關(guān)鍵字+數(shù)據(jù)驅(qū)動(dòng)混合測試
基于Android-微信小程序自動(dòng)化的關(guān)鍵是:webview的切換
對(duì)于微信App來說如何從NATIVE切換到webview的過程
測試版本信息
1.微信版本:7.0.21
2.Android:7.0
3.appium引入依賴:6.1.0
4.testng引入依賴:6.14.3
初始化實(shí)例配置信息
1.配置參數(shù)如下:
其中涉及到微信內(nèi)置webview版本與chromedriver一致性設(shè)置,查看流程如下:
第一步:查看微信webview版本信息,這里通過uc-devtools工具查看
uc-devtools工具獲取鏈接:
鏈接:https://pan.baidu.com/s/1GA3EPDz0GD3IyXUsgU8Z3g
提取碼:3lpg
scrcpy真機(jī)工具獲取鏈接:
鏈接:https://pan.baidu.com/s/1If7q_empeZgXWVXU0v8rIw
提取碼:3hi9
下載后打開,同時(shí)通過真機(jī)連接工具scrcpy打開微信,此時(shí)即可顯示微信的chromedriver版本號(hào):
從上圖可以看到chromedriver,去chromedriver官網(wǎng)下載對(duì)于的版本去驅(qū)動(dòng)
點(diǎn)擊下載對(duì)應(yīng)版本的chromedriver版本
下載后放到resources目錄下,見上圖的配置路徑。
第二部就可以正常使用web的元素查看了:
2.setCapability參數(shù)配置如下(入坑-需要先查看下自己微信小程序上下文切換的context,通過下面的方法可以查看):
其中最關(guān)鍵是的: options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
通過driver.getContextHandles()方法獲取從微信app切換到小程序后的所有句柄,配置到啟動(dòng)參數(shù)中。
把需要切換的context,配置到setExperimentalOption中即可。具體配置詳情如下:
//引用配置參數(shù)
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName", platformName);
capabilities.setCapability("appPackage", appPackage);
capabilities.setCapability("appActivity", appActivity);
capabilities.setCapability("automationName", automationName);
capabilities.setCapability("deviceName",deviceName);
capabilities.setCapability("chromedriverExecutable", chromePath);
capabilities.setCapability("platformVersion","7.0");
capabilities.setCapability("unicodeKeyboard",true);
capabilities.setCapability("noReset",true);
// 不重新簽名apk
capabilities.setCapability("resetKeyboard", true);
// 支持X5內(nèi)核應(yīng)用自動(dòng)化配置
capabilities.setCapability("recreateChromeDriverSessions", true);
/**
* ChromeOptions使用來定制啟動(dòng)選項(xiàng),因?yàn)樵赼ppium中切換context識(shí)別webview的時(shí)候,
* 把com.tencent.mm:toolsmp的webview識(shí)別成com.tencent.mm的webview.
* 所以為了避免這個(gè)問題,加上androidProcess: com.tencent.mm:toolsmp
* */
ChromeOptions options = new ChromeOptions();
/**
* 這里很關(guān)鍵>>
* ChromeOptions使用來定制啟動(dòng)選項(xiàng),因?yàn)樵赼ppium中切換context識(shí)別webview的時(shí)候,把com.tencent.mm:toolsmp的webview識(shí)別成com.tencent.mm的webview.
* 所以為了避免這個(gè)問題,加上androidProcess名:通過driver.getContextHandles()獲取所有的上下文,我這里獲取的是com.tencent.mm:appbrand0
* */
options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
// 初始化會(huì)默認(rèn)將chrome瀏覽器打開,需要將Browser置為空
capabilities.setBrowserName("");
// 每次啟動(dòng)時(shí)覆蓋session,否則第二次后運(yùn)行會(huì)報(bào)錯(cuò)不能新建session
capabilities.setCapability("sessionOverride", true);
URL url = null;
try {
url = new URL("http://127.0.0.1:4723/wd/hub");
} catch (MalformedURLException e) {
e.printStackTrace();
}
driver = new AndroidDriver(url, capabilities);
關(guān)鍵實(shí)現(xiàn)邏輯
1.查了一下網(wǎng)上很多說是需要在微信app內(nèi)的搜搜功能進(jìn)入小程序,但對(duì)于體驗(yàn)版的小程序這里肯定搜索不到的。所以進(jìn)入被測體驗(yàn)版小程序最簡單的方法是:下拉微信框+點(diǎn)擊小程序坐標(biāo)進(jìn)入最直接。
首次進(jìn)入小程序后都會(huì)在小程序列表展示,最新的位置都是第一個(gè)。
1.通過開啟手機(jī)設(shè)置內(nèi)置的【指針位置】來定位小程序的坐標(biāo)
其中通過坐標(biāo)點(diǎn)擊方法如下:
public void taptest(AndroidDriver driver,int x, int y){
/**設(shè)置顯示等待時(shí)間10s driver=baseAndroidDriver.getDriver(baseConfig)
特注:顯示等待與隱式等待相對(duì),顯示等待必須在每一個(gè)需要等待的元素前面進(jìn)行聲明,如果在規(guī)定的時(shí)間內(nèi)找到元素,則直接執(zhí)行,即找到元素就執(zhí)行相關(guān)操作
*/
wait = new WebDriverWait(driver,20);
//tap點(diǎn)擊坐標(biāo),輸入坐標(biāo),然后再release()釋放坐標(biāo)點(diǎn),用perform()去執(zhí)行一系列action操作
action = new TouchAction(driver).tap(PointOption.point(x,y)).release().perform();
}
2.實(shí)現(xiàn)代碼-webview切換成功后就可以正常使用顯示等待時(shí)間解決元素加載問題。
//進(jìn)入微信下拉滑動(dòng)
swipeToDown(driver);
//點(diǎn)擊被測小程序,通過坐標(biāo)點(diǎn)擊
taptest(driver,190,673);
//allure截圖存留
// SaveFailureScreenUtil.saveFailureScreenShot(driver);
//切換webview頁面
// 獲取到所有的contexts,并在啟動(dòng)參數(shù)里配置
System.out.println("所有的contexts:" + driver.getContextHandles());
// 切換到小程序webview對(duì)應(yīng)的context中
driver.context("WEBVIEW_com.tencent.mm:appbrand0");
System.out.println("切換context成功!");
// 獲取到所有的handles
Set windowHandles = driver.getWindowHandles();
System.out.println("所有的windowsHandles" + windowHandles);
for (String handle :windowHandles){
System.out.println("切換到對(duì)應(yīng)的windowHandle:" + handle);
driver.switchTo().window(handle);
String strTip = "IT互聯(lián)網(wǎng)熱門課程";
if(driver.getPageSource().contains(strTip)){
//找到了對(duì)應(yīng)的窗口,退出循環(huán)
break;
}else {
System.out.println("查詢的:"+strTip+"頁面可能不包含該文本信息");
}
}
//下拉滑動(dòng)操作
swipeToUp(driver);
//進(jìn)入正常的web元素定位操作
//點(diǎn)擊模擬試卷
UIElementUtil.clickButton("騰訊課堂","分類",driver);
xml維護(hù)的元素定位信息
通過日志可以看到已經(jīng)切換到webview并定位元素點(diǎn)擊成功了
所有的contexts:[NATIVE_APP, WEBVIEW_com.tencent.mm:appbrand0, WEBVIEW_com.tencent.mm:appbrand2]
切換context成功!
所有的windowsHandles[CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21, CDwindow-FA78683E0B1150082058BBC8EFF73001]
切換到對(duì)應(yīng)的windowHandle:CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21
查詢的:IT互聯(lián)網(wǎng)熱門課程頁面可能不包含該文本信息
切換到對(duì)應(yīng)的windowHandle:CDwindow-FA78683E0B1150082058BBC8EFF73001
INFO 2020-12-14 10:24:22 [main] com.iappium.utils.UIElementUtil.clickButton(UIElementUtil.java:186) - [分類]該點(diǎn)擊事件耗時(shí):445ms
最后-更多工具和技術(shù)請(qǐng)關(guān)注:Coding測試
其中UIElementUtil工具類是封裝的關(guān)鍵字工具欄,通過xml維護(hù)定位元素(等同于ui的自動(dòng)化測試的關(guān)鍵字),由于UIElementUtil使用的是dom4j解析的xml文件,內(nèi)容較多,需要看的話可以移步至項(xiàng)目源碼中查看iappium4j項(xiàng)目app+小程序自動(dòng)化測試-源碼
總結(jié)
以上是生活随笔為你收集整理的android微信小程序自动填表_微信小程序自动化,记录趟过的坑!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ip打包相对路径 vivado_Viva
- 下一篇: dxf geojson 转换_将Geop