Android 混合应用程序自动化-在webview模式下找不到xpath
我正在研究混合应用程序自动化 我已经要求开发人员为自动化提供启用webview的Android 混合应用程序自动化-在webview模式下找不到xpath,android,selenium,webview,appium,inspector,Android,Selenium,Webview,Appium,Inspector,我正在研究混合应用程序自动化 我已经要求开发人员为自动化提供启用webview的.apk文件。 我得到了.apk,我把它安装在我的真实设备(三星Galaxy)上,并签入了chrome://inspect以inspector模式查看应用程序。-它被显示出来 在我的代码中,我尝试了System.out.println(“ContextName:-”+contextNames)检查本机和Webview上下文是否显示。它成功地显示了Webview和本机 我有以下问题: 我能够找到元素,直到我的Login
.apk
文件。
我得到了.apk
,我把它安装在我的真实设备(三星Galaxy)上,并签入了chrome://inspect
以inspector模式查看应用程序。-它被显示出来
在我的代码中,我尝试了System.out.println(“ContextName:-”+contextNames)
检查本机和Webview上下文是否显示。它成功地显示了Webview和本机
我有以下问题:
我能够找到元素,直到我的Login
页面(使用本机和Webview上下文)
在登录
页面后,我在移动应用程序中有一个主屏幕,其中包含表格和文本列表、链接,因此我无法在该页面中找到任何元素
我尝试使用=>inspector
-copyxpath
功能复制xpath。我在Chrome inspector中搜索了xpath,它突出显示了元素。我在代码中使用相同的xpath来检查xpath细节的大小。但是它显示了我所有元素的size=0
我还尝试:
- 我在登录页面后切换到Webview上下文一次李>
- 在登录屏幕之前,我切换到了Webview模式
File f = new File("D:\\APK\\");
File fs = new File(f,"android-4.0-8071-Pulse_Deb_Mode.apk");
AndroidDriver driver;
DesiredCapabilities cap =new DesiredCapabilities();
//cap.setCapability(MobileCapabilityType.DEVICE_NAME,"Auto1");
cap.setCapability(MobileCapabilityType.DEVICE_NAME,"89959777"); //5bce9757
cap.setCapability(MobileCapabilityType.APP, fs.getAbsolutePath());
//cap.setCapability("appPackage", "au.com.ventia.apps.WMS");
//cap.setCapability("appActivity", "au.com.ventia.apps.WMS.MainActivity");
//cap.setCapability("platformName", "MobilePlatform.ANDROID");
//cap.setCapability("automationName", "Appium");
//cap.setCapability("autoWebview", true);
//cap.setCapability(MobileCapabilityType.BROWSER_NAME, "BROWSER");
//cap.setCapability(MobileCapabilityType.VERSION, "4.4.2");
//cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "21");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"),cap);
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
System.out.println(((AndroidDriver) driver).getOrientation());
System.out.println("Device Connected");
try{
Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
System.out.println("ContextName:- "+contextNames); //prints out something like NATIVE_APP \n WEBVIEW_1
// System.out.println("Working as:- "+ driver.getTitle());
}
Thread.sleep(40000);
driver.context((String) contextNames.toArray()[1]); // set context to WEBVIEW_1
List<WebElement> user_name = driver.findElementsById("userNameInput");
List<WebElement> pass_name = driver.findElementsById("passwordInput");
System.out.println("Checking"+user_name.size() + pass_name.size());
user_name.get(0).clear();
pass_name.get(0).clear();
user_name.get(0).sendKeys("<<>><<>>");
pass_name.get(0).sendKeys("<<>><<><");
driver.pressKeyCode(66);
Thread.sleep(30000);
//driver.context((String) contextNames.toArray()[0]); // set context to WEBVIEW_1
List<WebElement> li = driver.findElementsByXPath("//*[@id='app']/ion-pane/ion-side-menus/ion-side-menu-content/ion-header-bar/div[3]");
System.out.println("Check1-"+li.size());
List<WebElement> li2 = driver.findElementsByXPath(".//*[@id='app']/ion-pane/ion-side-menus/ion-side-menu-content/ion-header-bar/div[3]");
System.out.println("Refresh-"+li2.size());
List<WebElement> li3 = driver.findElementsByXPath("//*[@id=\"app\"]/ion-pane/ion-side-menus/ion-side-menu-content/ion-header-bar/div[3]");
System.out.println("Satus"+li3.size());
List<WebElement> li4 = driver.findElementsByXPath("//*[@id=\"au.com.ventia.apps.WMS\"]/ion-pane/ion-side-menus/ion-side-menu-content/ion-header-bar/div[3]");
System.out.println("Task"+li4.size());
}catch (Exception e){
System.out.println("Error Code---> "+e);
}
PORTRAIT
Device Connected
ContextName:- [NATIVE_APP, WEBVIEW_au.com.ventia.apps.WMS]
ContextName:- [NATIVE_APP, WEBVIEW_au.com.ventia.apps.WMS]
Checking11
Check1-0
Refresh-0
Satus0
Task0
如果您有一台mach机器,您可以通过记录操作轻松查看所有xpath。感谢您的帮助-它现在显示了一个不同的错误。未知错误:Chrome版本必须>=53.0.2785.0,你能帮我一下吗。我现在正在使用模拟器。已安装android Webview应用程序。现在我只能看到本机的应用程序(Webview缺失)。尝试了很多方法。你能使用UI automator与我共享屏幕UI吗?这样我就可以帮助你了