Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 混合应用程序自动化-在webview模式下找不到xpath_Android_Selenium_Webview_Appium_Inspector - Fatal编程技术网

Android 混合应用程序自动化-在webview模式下找不到xpath

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

我正在研究混合应用程序自动化

我已经要求开发人员为自动化提供启用webview的
.apk
文件。 我得到了
.apk
,我把它安装在我的真实设备(三星Galaxy)上,并签入了c
hrome://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吗?这样我就可以帮助你了