在App开发过程中,很容易用到第三方的WebView控件,这个属于移动端混合型App。在我们做自动化测试的过程中,就要对这种情况进行处理,最通用的办法就是先将appium切换到webview模式然后按查找web元素的方法对WebView里面的元素进行操作即可。具体实施方法,可以参考:http://www.tuicool.com/articles/bIBRZze

可是也有很多情况,如新浪微博第三方授权登录页面(如图一),这个嵌入到App中的第三方WebView,在查上下文信息的时候,找不到对应的WebView。

图一:网易新闻客户端新浪微博授权

查找当前可用的上下文信息的时候,用如下代码:

contexts=self.driver.contexts

for cotext in contexts:

print cotext

根据输出的信息,如果有WebView信息的时候,可以切换:

driver.switch_to.context("WEBVIEW")

或是 driver.context(“WEBVIEW”)

但是一直找不到WebView信息,如图二所示,此时就没有办法进行切换。

图二,获取上下文信息的显示结果

于是尝试了各种办法,都没有实现。最后只好用以下最笨的办法了,模拟点击屏幕:

def test_login(self):

#单击网易新闻客户端的登录按钮

time.sleep(10)

lgin=self.driver.find_element_by_id("com.netease.newsreader.activity:id/login_icon")

lgin.click()

time.sleep(2)       lgbt=self.driver.find_element_by_id("com.netease.newsreader.activity:id/biz_pc_main_info_profile_avatar")

lgbt.click()

time.sleep(2)

#单击新浪微博的登录按钮

sinalg=self.driver.find_element_by_id("com.netease.newsreader.activity:id/sinaweibo_name")

sinalg.click()

#***以下为模拟单击屏幕操作

time.sleep(3)

#单击输入用户名:sxf

self.driver.tap([(150,588),])

time.sleep(3)

self.driver.tap([(230,1516),])

self.driver.tap([(330,1681),])

self.driver.tap([(440,1516),])

#输入密码:123

self.driver.tap([(212,776),])

time.sleep(3)

self.driver.tap([(72,1236),])

self.driver.tap([(180,1236),])

self.driver.tap([(263,1236),])

time.sleep(3)

#单击登录按钮

self.driver.tap([(520,912),])

time.sleep(10)

上面的模拟单击操作,可以单击输入框调出键盘,然后再去单击键盘上面的按钮,达到输入信息的目的。定位屏幕上面的座标,可以通过网页:http://bbs.anjian.com/thread-519563-1-1.html 上面的方法。

通过模拟点击键盘操作,可以实现对无法查找到的WebView上面的元素进行操作,可是无法获取上面元素的内容,无法验证操作后的结果。这是一个很大的问题,目前在网上查找了一下,也没有找到好的办法,可能随着appium的发展会有解决办法的。也许有好的办法,我没有找到,后续我会努力找到好的解决办法,到时候再和大家共享。

原文:http://blog.sina.com.cn/s/blog_68f262210102v92p.html

Appium自动化WebView中元素的操作的更多相关文章

  1. appium自动化测试之UIautomatorviewer元素定位

    appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...

  2. python+Appium自动化:H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  3. appium自动化webview时遇到的chromedriver问题

    安卓app里面的网页,基本上都是使用手机系统上的webview 去显示的. 安卓 webview 可以看成是 手机上的 chrome 浏览器精简版. appium desktop 里面内置了 用于 w ...

  4. python+Appium自动化:id元素定位

    元素定位 与web自动化一样,app自动化元素定位也是非常重要的一环,,appium也是提供了很多元素定位的方法,比如:id.name.class.层级定位等等. 元素定位方式 id name cla ...

  5. 【WebView】Android WebView中的Cookie操作

    Hybrid App(混合式应用)的开发过程中少不了与WebView的交互,在涉及到账户体系的产品中,包含了一种登录状态的传递.比如,在Native(原生)界面的登录操作,进入到Web界面时,涉及到账 ...

  6. python+Appium自动化:各种元素定位方法

    name定位 driver.find_element_by_name('飞利浦净水').click() 测试结果报错:selenium.common.exceptions.InvalidSelecto ...

  7. Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...

  8. Appium之WebView自动化

    WebView的测试:主要作用在混合(Hybrid)的应用 * 一部分是原生界面和代码,而另一部分是内嵌网页 * 比如微信.支付宝 * 内嵌了一个浏览器内核,由浏览器内核实现的 安卓应用中的内嵌的展示 ...

  9. python3+Appium自动化12-H5元素定位环境搭建

    前言 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原生控件进行元素 ...

随机推荐

  1. 8. java 面向对象

    一.面向对象特征 1. 封装 方法就是一种封装 关键字private也是一种封装 封装就是讲一些逻辑细节信息隐藏起来,对于外界不可见:外界只需调用我即可: 一旦使用了private进行修饰,那么本类当 ...

  2. 《Java面试全解析》505道面试题详解

    <Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...

  3. Codeforces Round #599 (Div. 2) B1. Character Swap (Easy Version) 水题

    B1. Character Swap (Easy Version) This problem is different from the hard version. In this version U ...

  4. Note | 用Hugo搭建博客并部署到GitHub Pages

    目录 1. 本地搭建 1.1 安装Hugo 1.2 创建站点 1.3 新建页面和文章 1.4 使用主题 1.5 修改配置文件 1.6 预览 2. 部署 之前担心过现有博客平台(如博客园,CSDN)突然 ...

  5. zabbix--完整安装攻略

    zabbix:是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解 ...

  6. iOS: 创建静态库,实现自己的API私有使用

    一.介绍 在开发中经常使用到第三方的静态框架,格式基本上就是.framework和.a格式的.使用时,会发现我们只能使用无法修改,这就是静态框架的一个好处,私有性.内部实现的代码只有公开者本人知晓,对 ...

  7. 详解JAVA8Stream API {全}

    1: 概述 1.1 优势 1.2 与传统迭代器的区分 1.3 流的操作类型分为两种: 2:流的构造与转换 2:1 常见构造 2.2: 三大包装类型的构造 2.3 并行流的规则输出 2.4 流的转换 3 ...

  8. 【mysql】You must reset your password using ALTER USER statement before executing this statement. 报错处理

    1.问题:登陆mysql以后,不管运行任何命令,总是提示这个 mysql> select user,authentication from mysql.user; ERROR 1820 (HY0 ...

  9. [转]使用IConfigureNamedOptions和ConfigureAll配置命名选项

    这是我上一篇关于在ASP.NET Core 2.x中使用多个强类型设置实例的后续文章.在文章的结尾,我介绍了命名选项的概念,该选项已添加到ASP.NET Core 2.0中.在本文中,我将详细介绍如何 ...

  10. WCF通信简单学习实例

    最近在学习WCF通信,自己简单做个实例分享一下,环境是VS2015,使用的项目都是WPF的项目,其实大家用Winform或者Web项目也可以,都可以用的. 一.服务器端 1.创建WCF服务 服务名为W ...