Android 通过使用appium执行driver.context()切换到WebView
问题 我使用appium在真实设备上实现android自动化。我切换到WebView use driver.context(“WebView_com.xxx.myapp”),然后执行driver.getPageSource(),出现一个问题,返回如下Android 通过使用appium执行driver.context()切换到WebView,android,selenium-chromedriver,android-webview,appium,Android,Selenium Chromedriver,Android Webview,Appium,问题 我使用appium在真实设备上实现android自动化。我切换到WebView use driver.context(“WebView_com.xxx.myapp”),然后执行driver.getPageSource(),出现一个问题,返回如下 capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "b307aa10");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "b307aa10");
capabilities.setCapability("automationName", "appium");
capabilities.setCapability("platformVersion", "8.1.0");
capabilities.setCapability("appPackage", "com.dayizhihui.dayishi.hpv");
capabilities.setCapability("appActivity", ".main.view.WelcomeActivity");
capabilities.setCapability("noReset", "true");
Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("androidPackage", "com.android.chrome");
capabilities.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
introducePageHandle.clickIntroduceIcon();
System.out.println("Before " + driver.getContext());
System.out.println("All Contexts " + driver.getContextHandles());
driver.context("WEBVIEW_com.dayizhihui.dayishi.hpv");
System.out.println("After " + driver.getContext());
System.out.println("PageSource " + driver.getPageSource());
环境
appium:1.15.1
OS:Windows 10
API :java
Android:8.1
详细信息
我期望的能力如下
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "b307aa10");
capabilities.setCapability("automationName", "appium");
capabilities.setCapability("platformVersion", "8.1.0");
capabilities.setCapability("appPackage", "com.dayizhihui.dayishi.hpv");
capabilities.setCapability("appActivity", ".main.view.WelcomeActivity");
capabilities.setCapability("noReset", "true");
Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("androidPackage", "com.android.chrome");
capabilities.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
introducePageHandle.clickIntroduceIcon();
System.out.println("Before " + driver.getContext());
System.out.println("All Contexts " + driver.getContextHandles());
driver.context("WEBVIEW_com.dayizhihui.dayishi.hpv");
System.out.println("After " + driver.getContext());
System.out.println("PageSource " + driver.getPageSource());
不切实际的结果
Before NATIVE_APP
All Contexts [NATIVE_APP, WEBVIEW_com.dayizhihui.dayishi.hpv, WEBVIEW_chrome]
After WEBVIEW_com.dayizhihui.dayishi.hpv
PageSource <html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><iframe name="chromedriver dummy frame" src="about:blank"></iframe></body></html>
本机应用程序之前的
所有上下文[NATIVE_应用程序、WEBVIEW_com.dayizhihui.dayishi.hpv、WEBVIEW_chrome]
在WEBVIEW_com.dayizhihui.dayishi.hpv之后
页面源
我真的很想有人能帮我解决这个问题,谢谢
切换到网络视图后,您需要切换到
iframe
,因为您试图与之交互的网络视图上存在iframe。您可以切换到iframe,如:
driver.switchTo().frame(driver.findElement(By.name("chromedriver dummy frame")));
使用
autoWebview
设置功能:
capabilities.setCapability("autoWebview", true);
您在问题中提到的html是iframe,您是否尝试过我在回答中提到的代码?谢谢。我试过你的建议,但没有回音。事实上,这个框架不应该存在谢谢,html不是iframe,请检查我刚刚上传的照片谢谢,但它不适合我。我在appium服务器日志中看到一行代码,如下所示。也许这就是为什么
用driver.setContext()结果响应客户端:null