Appium自动化WebView中元素的操作

在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

原文地址:https://www.cnblogs.com/peachh/p/9740185.html

时间: 2024-07-31 05:54:21

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

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

元素定位 与web自动化一样,app自动化元素定位也是非常重要的一环,,appium也是提供了很多元素定位的方法,比如:id.name.class.层级定位等等. 元素定位方式 id name class List定位 相对定位 Xpath定位 H5页面元素定位 Uiautomator定位 首先可以进入SDK中的tools文件夹中打开uiautimatorviewer.bat,用于元素定位 测试场景,启动淘宝app,同意温馨提示,进入首页 id定位 Appium中可以使用find_element

Appium学习路—Android定位元素与操作

一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能 下面是用monitor抓取到的页面元素 下面使用Appium Inspector定位的元素 二.元素定位   1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): dr

Appium 微信 webview 的自动化技术

最近好多人问微信webview自动化的事情, 碰巧我也在追微信webview的自动化和性能分析方法. 先发出来一点我的进展给大家参考下. 此方法用于Android平台, iOS请自行解决 微信的设置 用微信打开debugx5.qq.com, 这是个微信的x5内核调试页面. 你可以在任何聊天窗口内输入这个网址. 并打开它. 勾选"是否打开TBS内核Inspector调试功能" 使用ChromeDriver编写测试用例 首先安装ChromeDriver从官方下载或者从你的appium的安装

WebView中的视频全屏的相关操作

最近工作中,基本一直在用WebView,今天就把它整理下: WebView 顾名思义,就是放一个网页,一个看起来十分简单,但是用起来不是那么简单的控件. 首先你肯定要定义,初始化一个webview,其实网上的例子很多,我这里就简单的把一些WebView 中可能会用到的的很重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去就行了 <span style="white-space:pre"></span><pre name="co

jQuery操作iframe子页中元素代码实例

jQuery操作iframe子页中元素代码实例:本章节介绍一下如何在父页面中操作iframe子页面中的元素,希望能够给需要的朋友带来一定的帮助.一.父页面代码: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <

一、实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作

请指教交流! 1 package com.it.hxs.c01; 2 3 import java.util.Stack; 4 5 /* 6 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作 7 */ 8 public class GetMinStack { 9 10 public static void main(String args[]) { 11 GetMinStack demoStack = new GetMinStack(); 12 demoStack.pus

Android定位元素与操作

一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能 下面是用monitor抓取到的页面元素 下面使用Appium Inspector定位的元素 二.元素定位   1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): dr

appium自动化基础总结

---恢复内容开始--- 断断续续学了2周appium自动化,把经常用到基础写出来吧!方便日后便于查看. appium解决中文无法输入和,启动app自动清除数据的问题.在前置代码里面加上这3句就可以解决. desired_caps = { "unicodeKeyboard": "True", # 使用unicode输入法 "resetKeyboard": "True", # 重置输入法到初始状态 "noReset&q

移动端测试——APP元素定位操作 (3)

一.appium基础API讲解 1.1 APP元素定位操作 建议: 使用显示等待 能用id.class定位就不用xpath定位 只要看的见的,用xpath的text就是万能的 手工测试主要通过可见按钮操作,而自动化是通过元素进行交互操作 元素的基本定位基于当前屏幕范围内展示的可见元素 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号