appium for hybrid app 处理webview
2015-10-23 22:58
309 查看
之前研究了一段时间的appium for native app 相应的总结如下:
appium测试环境搭建 :/article/4969978.html
知乎Android客户端登陆:/article/4969984.html
appium实现截图和清空EditText:/article/4969987.html
appium 滑动处理:/article/4969990.html
Android pure web driver appium for mobile web 之使用 ChromeDriver:/article/4970005.html
appium 九宫格解锁招商银行手机客户端app :/article/4970006.html
这里使用的依然是知乎客户端,当使用第三方账户登陆时候会跳转weibo验证的API,使用UIAutomatior打开效果如下
可以看出该登陆框是webview
所以应该可以通过切换context实现Native app 和Webview切换
万万没想到,appium压根没找到相应的Webview
只有NATIVE_APP
这说明,其实webview是可以和app一样去识别
接下来就可以这样做
效果如下:
appium测试环境搭建 :/article/4969978.html
知乎Android客户端登陆:/article/4969984.html
appium实现截图和清空EditText:/article/4969987.html
appium 滑动处理:/article/4969990.html
Android pure web driver appium for mobile web 之使用 ChromeDriver:/article/4970005.html
appium 九宫格解锁招商银行手机客户端app :/article/4970006.html
这里使用的依然是知乎客户端,当使用第三方账户登陆时候会跳转weibo验证的API,使用UIAutomatior打开效果如下
可以看出该登陆框是webview
所以应该可以通过切换context实现Native app 和Webview切换
Set<String> context = driver.getContextHandles(); for (String contextName : context) { System.out.println(contextName); } 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(); } }
效果如下:
相关文章推荐
- iOS学习笔记之文件的压缩和解压(zip)
- iOS巅峰之Swift结构体和类, 枚举, 构造器, 继承, 协议, 扩展(完结篇)
- iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
- Android之Universal-Image-loader
- python list的append和extend操作
- Android Studio技能之快捷键
- iOS巅峰之Swift 函数, 闭包详解(下)
- iOS-捕获应用程序崩溃日志
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- android中的SurfaceView,SurfaceHolder,SurfaceHolder.CallBack
- Android端投影演示方案
- iOS开发常见error
- 在Android程序中使用已有的SQLite数据库
- Android--PullToRefreshListView的onRefreshComplete()不起作用的问题
- iOS多线程1 Operation
- iOS定义常量的最佳实践
- Android应用如何反馈Crash报告
- Android中GridView解析
- android之android.intent.category.DEFAULT的用途和使用
- iOS中 常用的mac终端指令汇总 技术分享