zoukankan      html  css  js  c++  java
  • appium for hybrid app 处理webview

    之前研究了一段时间的appium for native app 相应的总结如下:

                                                   appium测试环境搭建 :http://www.cnblogs.com/tobecrazy/p/4562199.html

                        知乎Android客户端登陆:http://www.cnblogs.com/tobecrazy/p/4579631.html

                                                      appium实现截图和清空EditText:http://www.cnblogs.com/tobecrazy/p/4592405.html

                                                      appium 滑动处理:http://www.cnblogs.com/tobecrazy/p/4612133.html

                      Android pure web driver appium for mobile web 之使用 ChromeDriver:http://www.cnblogs.com/tobecrazy/p/4836995.html

                                                  appium 九宫格解锁招商银行手机客户端app :http://www.cnblogs.com/tobecrazy/p/4881390.html

    这里使用的依然是知乎客户端,当使用第三方账户登陆时候会跳转weibo验证的API,使用UIAutomatior打开效果如下

    可以看出该登陆框是webview

    所以应该可以通过切换context实现Native app 和Webview切换

    1     Set<String> context = driver.getContextHandles();
    2         for (String contextName : context) {
    3             System.out.println(contextName);
    4 
    5         }
    6         driver.context("WEBVIEW");

    万万没想到,appium压根没找到相应的Webview

    只有NATIVE_APP

    这说明,其实webview是可以和app一样去识别

    接下来就可以这样做

    public class dealWebView {
        private AndroidDriver<?> driver;
        private boolean isInstall = false;
        private String userName="youremail";
        private String password="yourpassword";
        /**
         * @author Young
         * @throws IOException
         */
        public void startRecord() throws IOException {
            Runtime rt = Runtime.getRuntime();
            // this code for record the screen of your device
            rt.exec("cmd.exe /C adb shell screenrecord /sdcard/runCase.mp4");
    
        }
    
        @BeforeClass(alwaysRun = true)
        public void setUp() throws Exception {
            // set up appium
    
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
            capabilities.setCapability("platformName", "Android");
            capabilities.setCapability("deviceName", "Android Emulator");
            capabilities.setCapability("platformVersion", "5.1");
            // if no need install don't add this
            if (isInstall) {
                File classpathRoot = new File(System.getProperty("user.dir"));
                File appDir = new File(classpathRoot, "apps");
                File app = new File(appDir, "zhihu.apk");
                capabilities.setCapability("app", app.getAbsolutePath());
            }
            capabilities.setCapability("appPackage", "com.zhihu.android");
            // support Chinese
            capabilities.setCapability("unicodeKeyboard", "True");
            capabilities.setCapability("resetKeyboard", "True");
            // no need sign
            capabilities.setCapability("noSign", "True");
            //capabilities.setCapability("autoWebview", "True");
            capabilities.setCapability("appActivity", ".ui.activity.GuideActivity");
            driver = new AndroidDriver<WebElement>(new URL(
                    "http://127.0.0.1:4723/wd/hub"), capabilities);
            startRecord();
        }
    
        @Test
        public void loginWithMicroBlog() throws InterruptedException {
    
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            // swipe to right
            driver.findElementById("com.zhihu.android:id/login_and_register")
                    .click();
            driver.findElementById("com.zhihu.android:id/btn_social").click();
            driver.findElementById("com.zhihu.android:id/login_weibo").click();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            Thread.sleep(15000);
            Set<String> context = driver.getContextHandles();
            for (String contextName : context) {
                System.out.println(contextName);
    
            }
    //        driver.context("WEBVIEW");
            System.out.println(driver.getPageSource());
            driver.findElementsByClassName("android.widget.EditText").get(0).sendKeys(
                    userName);
            driver.findElementsByClassName("android.widget.EditText").get(1).sendKeys(
                    password);
            driver.findElementByXPath("//android.view.View[contains(@content-desc,'登录')]").click();
    
        }
    
        @AfterClass(alwaysRun = true)
        public void tearDown() throws Exception {
            driver.quit();
        }
    }

    效果如下:

     

  • 相关阅读:
    git 常用命令
    SVG Sprite技术介绍
    添加样式(后台给字段note(left,height-auto ))
    assign,copy,retain,readonly,readwrite之间区别
    遍历(字典的遍历)
    Block
    loadView、viewDidLoad及viewDidUnload的关系
    IOS单例模式(Singleton单粒模式)
    模仿,后台
    仿站 通用套路
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/4905917.html
Copyright © 2011-2022 走看看