混合应用程序自动化 - 无法在Webview模式下找到xpath

时间:2017-05-23 03:29:40

标签: android selenium webview appium inspector

我正在从事混合应用自动化。

我已经要求开发人员提供支持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

我也尝试过:

  • 我在登录页面后一次向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

0 个答案:

没有答案