簡體   English   中英

Appium Android 使用 Serenity BDD 切換應用程序(本機和 chrome)

[英]Appium Android switch app (native and chrome) using serenity BDD

我正在使用 appium 的寧靜(v2.3.12)

我的場景需要將應用程序從本機切換到打開 chrome 並驗證表單以創建新帳戶,然后 go 回到本機並嘗試登錄。

我使用 serenity.properties 的經典方式來實例化 appiumDriver 並使用 UIAutomator2 自動化應用程序。 當我需要切換 chrome 時,我使用具有相同 url 和新功能的新 AppiumDriver:

DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("automationName", "UIAutomator2");
    capabilities.setCapability("browserName", "Chrome");
    capabilities.setCapability("UDID", udid);
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", "emulator-5554");
    capabilities.setCapability("platformVersion", "11.0");
    AppiumDriver newDriver = new AndroidDriver(new URL(url), capabilities);

Chrome 啟動良好,我可以執行我的操作。

但問題就在這里:當我不想切換回來時

我嘗試了很多方法,但到目前為止都沒有工作:

第一次嘗試是通過以下方式回調我的應用程序:

((AndroidDriver)((WebDriverFacade) getDriver()).getProxiedDriver()).launchApp();

或者

((AndroidDriver)((WebDriverFacade) getDriver()).getProxiedDriver()).resetApp();

本機應用程序啟動,但驅動程序無法找到任何元素,當我嘗試 getPageSource 時:

org.openqa.selenium.WebDriverException:處理命令時發生未知的服務器端錯誤。 原始錯誤:無法代理。 代理錯誤:“GET /wd/hub/session/f2dd1d65-351f-4845-b321-298e41b7df4d/source”無法代理到 UiAutomator2 服務器,因為檢測進程未運行(可能已崩潰)。 檢查服務器日志和/或 logcat output 了解更多詳細信息

第二次嘗試: a.quit() 在使用第二個之前執行第一個 appiumDriver 但是當我在 chrome 操作之后執行 a.launchApp() 時,我得到了這個:

org.openqa.selenium.NoSuchSessionException:Session ID 為 null。 調用 quit() 后使用 WebDriver?

我還嘗試為每個 appiumDriver 使用兩個不同的 appium 服務器。


也許解決方案是在退出並在 chrome 中執行操作后重新啟動 serenity appiumDriver,因為我嘗試啟動第三個 appiumDriver,它運行良好並在本機應用程序中找到元素,但它不適用於 serenity 中的 PageObject,我沒有知道如何在測試中從 serenity 中退出並重新啟動 appiumDriver。


當我重新打開應用程序元素時,相同的過程在 iOS 上運行良好。 也許問題是寧靜處理 UIAutomator2 的方式?

我建議一種解決方法。 盡量不要創建 Chrome 驅動程序。 當您想離開應用程序(主應用程序)打開 Chrome 時,只需單擊 Android 主頁(或返回)按鈕 go 回到主屏幕。 然后單擊 Chrome 圖標並檢查您是否可以繼續與其交互。 如果是,那么請繼續使用 Chrome,直到想回到應用程序為止。 利用:

driver.launchApp()

或者

driver.activateApp(variables.getProperty("appium.appPackage")); //Android 
driver.activateApp(variables.getProperty("appium.bundleId")); //iOS 

對於您遇到的異常,我認為它來自您管理多個驅動程序的方式。 當您切換到 Chrome 驅動程序時,您的主應用程序驅動程序 session 似乎意外調用了 quit()。 我不確定您的代碼結構如何。 但是,如果您不想通過上述解決方法來修復它,那么仔細管理您的驅動程序可能是一個不錯的方法。

更多關於 SessionNotFoundException 的信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM