【发布时间】:2021-01-10 09:35:05
【问题描述】:
长期以来,我一直被一个问题所困扰,无法解决并且急需帮助。我有一个 android apk 文件,启动应用程序后,它会显示网站的 Webview。启动应用后,我无法从 Native App 切换到 Webview。
我看到 2 个可用的上下文(本机和 Webview),但我无法切换到 WebView,它无法显示“message”:“ChromeDriver 已准备好进行新会话”。以下是我尝试切换时的错误消息。我在 Appium 中验证了 ChromeDriver,它与 Chromeversion 相同,并且 Appium 是 v4 最新的
Error in switching Context : OpenQA.Selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Did not get a valid response object. Object was: {"value":{"build":{"version":"85.0.4183.87 (cd6713ebf92fa1cacc0f1a598df280093af0c5d7-refs/branch-heads/4183@{#1689})"},"message":"ChromeDriver ready for new sessions.","os":{"arch":"x86_64","name":"Windows NT","version":"10.0.17763"},"ready":true}}
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at MobileDriver.SwithContextToWebView(AppiumDriver`1 driver, String context) in C:\Automation\Src\Common\MobileDriver.cs:line 656
以下是我想要的能力
private static AppiumOptions SetCapability(MobileDriverConfig config)
{
AppiumOptions capabilities = new AppiumOptions();
capabilities.AddAdditionalCapability("automationName", config.AutomationName);
capabilities.AddAdditionalCapability("deviceName", "Android");
capabilities.AddAdditionalCapability("platformName", config.PlatformName);
capabilities.AddAdditionalCapability("platformVersion", config.PlatformVersion);
capabilities.AddAdditionalCapability(CapabilityType.Platform, config.SystemOs);
capabilities.AddAdditionalCapability("udid", config.DeviceId);
capabilities.AddAdditionalCapability("appPackage", config.AppPackage);
capabilities.AddAdditionalCapability("appActivity", config.AppActivity);
capabilities.AddAdditionalCapability("chromeBundleId", config.ChromeBundleId);
capabilities.AddAdditionalCapability("ensureWebviewsHavePages", config.EnsureWebviewsHavePages);
capabilities.AddAdditionalCapability("webviewDevtoolsPort", config.WebviewDevtoolsPort);
capabilities.AddAdditionalCapability("chromedriverUseSystemExecutable", config.ChromedriverUseSystemExecutable);
capabilities.AddAdditionalCapability("enableWebviewDetailsCollection", config.EnableWebviewDetailsCollection);
capabilities.AddAdditionalCapability("fullContextList", true);
}
以下是我用于上下文切换的内容
public void SwitchToContext(ViewType type)
{
Thread.Sleep(10000);
var driver = (AppiumDriver<IWebElement>)MDriver; // this is already initialized
System.Collections.ObjectModel.ReadOnlyCollection<string> allContexts = driver.Contexts; // returns 2 Context [Native_APP, WEBVIEW_packageName]
foreach (string context in allContexts)
{
Logger.Debug("Context Name: " + context);
switch (type)
{
case ViewType.Native:
if (context.Contains("NATIVE"))
{
driver.Context = context; // Native Switch works fine
}
break;
case ViewType.Webview:
if (context.Contains("WEBVIEW"))
{
driver.Context = context; // Webview switch errors out
}
break;
}
}
}
下面是我如何初始化我的驱动程序
var driver = new AndroidDriver<IWebElement>(new Uri("http://" + config.Server + ":"
+ config.Port + "/wd/hub/"), SetCapability(config), new TimeSpan(0, 3, 0));
请帮忙解决问题
【问题讨论】:
标签: c# selenium selenium-webdriver appium appium-android