【问题标题】:Switching Context in amazon app in Appium在 Appium 的亚马逊应用程序中切换上下文
【发布时间】:2019-04-02 17:56:46
【问题描述】:

我正在通过 appium 自动化 Amazon 应用程序。在产品描述页面中,它使用 webview。 但是当在 appium 中使用 getContextHandles() 时,它只返回 NATIVE_APP 作为上下文。 即使使用 driver.context("WEBVIEW_1") 直接切换也会抛出异常,提示不存在此类上下文。

如何在亚马逊应用中切换到 webview。

public class AmazonTest {
    AndroidDriver<MobileElement> driver;

    public void setUp() throws MalformedURLException{
        //Set up desired capabilities and pass the Android app-activity and app-package to Appium
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("VERSION", "9"); 
        capabilities.setCapability("deviceName","Mi A2");
        capabilities.setCapability("platformName","Android");
        capabilities.setCapability("appPackage", "com.amazon.mShop.android.shopping");
        capabilities.setCapability("appActivity", "com.amazon.mShop.home.HomeActivity");

        //Url where appium server is running
        URL url = new URL("http://0.0.0.0:4723/wd/hub");
        driver = new AndroidDriver<>(url, capabilities);
    }


    public void amazonTest() throws InterruptedException {
        //Skip sign in
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        MobileElement skipSignInButton = (MobileElement) driver.findElement(By.id("com.amazon.mShop.android.shopping:id/skip_sign_in_button"));
        skipSignInButton.click();

        //Search for IPhone
        driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);
        MobileElement searchTextElement = (MobileElement) driver.findElement(By.id("com.amazon.mShop.android.shopping:id/rs_search_src_text"));
        searchTextElement.sendKeys("iPhone X"+"\n");

        //click on first result
        driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);
        MobileElement firstResult = (MobileElement) driver.findElement(By.xpath("//android.widget.TextView[contains(@text,'Apple iPhone X (64GB) - Space Grey')]"));
        firstResult.click();

        //Click on Enter Pincode button
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        MobileElement pincodeButton = (MobileElement) driver.findElement(By.id("com.amazon.mShop.android.shopping:id/loc_ux_gps_enter_pincode"));
        pincodeButton.click();

        //Enter pincode
        driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);
        MobileElement pinTextBox = (MobileElement) driver.findElement(By.id("com.amazon.mShop.android.shopping:id/loc_ux_pin_code_text_pt1"));
        pinTextBox.sendKeys("248002");
        MobileElement applyButton = (MobileElement) driver.findElement(By.id("com.amazon.mShop.android.shopping:id/loc_ux_update_pin_code"));
        applyButton.click();

        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

        //Swipe up to show the buy now button
        TouchAction ta = new TouchAction(driver);
        ta.press(PointOption.point(540, 1420)).moveTo(PointOption.point(540, 200)).release().perform();


        Set<String> con = driver.getContextHandles(); //Get all context associated with this app
        for(String s : con) {   //only showing native app
            System.out.println(s);
        }
    }

    //close the application
    public void teardown(){
        driver.quit();
    }

    public static void main(String args[]) {
        AmazonTest d = new AmazonTest();
        //simulating TestNg Flow
        try {
            d.setUp();
            d.amazonTest();
            d.teardown();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java appium


    【解决方案1】:

    对于混合应用程序,您将需要一个调试应用程序来使用 appium 运行自动化测试。如果您使用混合应用程序的发布版本,您将能够自动化本机上下文。但要运行非原生内容,您需要一个调试应用程序。

    本机应用:不需要调试应用。

    混合应用:需要调试应用来检测网络元素,原生内容可以两种方式使用。

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2017-01-14
      • 2012-10-28
      • 2018-03-27
      • 2011-06-09
      • 2018-01-22
      相关资源
      最近更新 更多