【发布时间】:2021-06-13 23:34:47
【问题描述】:
我在 appium (v2.3.12) 中使用 serenity
我的场景需要将应用从原生切换到打开 chrome 并验证表单以创建新帐户,然后返回原生并尝试登录。
我使用 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 输出以获取更多详细信息
第二次尝试: 在使用第二个之前执行第一个 appiumDriver 的 .quit() 但是当我在 chrome 操作之后执行 .launchApp() 时,我得到了这个:
org.openqa.selenium.NoSuchSessionException:会话 ID 为空。调用 quit() 后使用 WebDriver?
我也尝试为每个 appiumDriver 使用两个不同的 appium 服务器。
也许解决方案是在退出并在 chrome 中执行操作后重新启动 serenity appiumDriver,因为我尝试启动第三个 appiumDriver,它运行良好并在本机应用程序中找到元素,但它不适用于 serenity 中的 PageObject,我在测试中不知道如何退出并从宁静中重新启动appiumDriver。
当我重新打开应用程序元素时,相同的过程在 iOS 上运行良好。也许问题是宁静处理 UIAutomator2 的方式?
【问题讨论】:
标签: java selenium-chromedriver appium serenity-bdd