【问题标题】:how to Automate/test Android hybrid apps using appium?如何使用 appium 自动化/测试 Android 混合应用程序?
【发布时间】:2016-12-21 05:58:48
【问题描述】:

我尝试使用 appium 自动化混合应用程序。我已经完成了整个设置,并且还使用示例 apk 文件进行了测试。我在为我的混合应用程序获取对象属性时遇到问题。我无法使用 Appium 检查器或 uiautomatorviewer 检查 id。它只为我的应用显示一个类。

我还需要启用 WebView 调试,用于制作 setWebContentsDebugging 已启用

在 WebView 类上为真。谁能帮助我如何做到这一点?

有些博客说要保留 driver.context("web_view");但我不清楚如何得到它。请帮助解决这个问题。 谢谢。

这是我的 java 类

    public class myMavenTest {
                private WebDriver driver;
                //i think is not the way to do this.so i comented this.
                /*public void onCreate(){
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
                         if(0 != (getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE)){
                             WebView.setWebContentsDebuggingEnabled(true);
                         }
                    }
                }*/

                @BeforeTest
                public void setUp() throws Exception
                {
                System.out.println("in the setup function");
                    DesiredCapabilities capabilities = new DesiredCapabilities();
                    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

                           capabilities.setCapability("deviceName","My Android");   
                           capabilities.setCapability("platformVersion","5.1");                             
                           capabilities.setCapability("platformName","Android");
    capabilities.setCapability("appPackage","com.mysoftware.testapp");  
    capabilities.setCapability("appActivity","com.mysoftware.testapp.MainActivity");

                try
                {
                    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

                    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
                    //Thread.sleep(10000);
                }
                catch(MalformedURLException e)
                {
                e.printStackTrace();
                }
                }

                @Test
                public void Loginforsample() throws Exception
                {
                    System.out.println("in the login() function");

        //i tried using classname of my app. but it is not recognizing
                    driver.findElement(By.className("ink-dark")).click();
        //After the button clicks need to enter the text
        driver.findElement(By.xpath("//need to find xpath'")).sendKeys("My first Automation");

        //tried using selendroid.apk works fine here.
/*driver.findElement(By.id("io.selendroid.testapp:id/startUserRegistration")).click();*/                


                    Thread.sleep(10000);

                }

                @AfterTest
                public void tearDown() throws InterruptedException
                {
                    Thread.sleep(10000);
                driver.quit();
                }
            }

【问题讨论】:

    标签: java android selenium-webdriver appium


    【解决方案1】:

    使用下面的示例混合应用程序代码,它是我为 WEBView Native View 的组合编写的。希望对你有帮助!

    public class Hybrid_App {
    
    public static void main(String[] args) throws MalformedURLException, InterruptedException{
    
        DesiredCapabilities capabilities = new DesiredCapabilities();
    
        capabilities.setCapability("deviceName", "Atom 2x");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "5.1");
    
        capabilities.setCapability("appPackage","***YourHydridAppPkg****");
        capabilities.setCapability("appActivity", "****YourlauchableActivity***");
    
        AndroidDriver driver= new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    
        Thread.sleep(4000);
    
        Set<String> contextHandles = driver.getContextHandles();
    
        Map<String,String> hashMap= new HashMap<String,String>();
    
        for(String contextname:contextHandles){
    
            if(contextname.contains("NATIVE")){
    
                hashMap.put("native", contextname);
    
            }else{
                hashMap.put("webview", contextname);
            }
        }
    
        //native page - Native 
        driver.context(hashMap.get("native"));
    
        WebDriverWait wait= new WebDriverWait(driver, 50);
        WebElement ele_voucher = wait.until(ExpectedConditions.visibilityOfElementLocated(
                By.xpath("//*[@class='android.view.View'][@index='9'][@content-desc='VOUCHERS']")));
    
        System.out.println(ele_voucher.isDisplayed());
    
        Thread.sleep(6000);
        ele_voucher.click();
    
        Thread.sleep(9000);
    
        //second page - Native
        driver.context(hashMap.get("native"));
    
        Thread.sleep(5000);
        driver.findElementByXPath("//*[@class='android.view.View'][@index='17'][@content-desc='REDEEM']").click();
    
        Thread.sleep(8000);
    
        System.out.println("----Third page----"+" uname,pwd element");
    
        //third page - Webview
        driver.context(hashMap.get("webview"));
    
        Thread.sleep(6000);
    
        driver.findElementByXPath("//input[@class='x-input-email'][@type='email'][@name='email']").sendKeys("descbatch@gmail.com");
    
        WebElement ele_pwd = driver.findElementByXPath("//input[@class='x-input-password'][@type='password'][@name='password']");
    
        ele_pwd.click();
        Thread.sleep(4000);
        ele_pwd.sendKeys("12345");
    
        Thread.sleep(6000);
    
    
        System.out.println("----Third page----"+" Sign in element");
    
        //fourth page - Native
        driver.context(hashMap.get("native"));
    
        Thread.sleep(6000);
        driver.findElementByXPath("//*[@class='android.view.View'][@index='69'][@content-desc='SIGN IN']").click();
        Thread.sleep(6000);
    
        driver.sendKeyEvent(AndroidKeyCode.BACK);
    
    
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2019-05-01
      • 2015-12-20
      • 2017-05-14
      • 2021-10-11
      • 2017-10-18
      • 2017-12-26
      相关资源
      最近更新 更多