我正在从事混合应用自动化。
我已经要求开发人员提供支持webview的.apk
文件以实现自动化。
我得到.apk
并安装在我的真实设备(Samsung Galaxy)上并检入c hrome://inspect
以检查模式查看应用程序。 - 显示
在我的代码中,我尝试System.out.println("ContextName:- " + contextNames);
检查Native和Webview上下文是否显示。它成功显示了Webview和Native。
我有以下问题:
我能够在我的Login
页面找到元素(使用Native和Webview上下文)。
在Login
页面后,我在移动应用中有一个主屏幕,其中包含表格和文字列表,链接,因此我无法在此页面中找到任何元素。
我尝试使用=>复制xpath; inspector
- copyxpath
功能。我在Chrome检查器中使用该xpath进行搜索,并突出显示(显示)元素。我在代码中使用相同的xpath来检查xpath详细信息的大小。但它为我的所有元素显示size = 0
。
我也尝试过:
但是,我无法在我的网页上找到任何元素。
是否可以捕获页面中的所有可用元素,以检查是否至少我在正确的轨道上?我不确定我犯的错误在哪里。任何人都可以建议我解决一下吗?
!!!注意: 我有以下限制:我只能使用真实(物理)设备,而不能使用模拟器。
代码:
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