Python+Appium学习篇之WebView处理

1.认识WebView

实例说明:

当你打开百度阅读APP→VIP全站去广告→用自带的 UI Automator去定位里面的元素,如图:

不管你去定位  ‘规则详情‘  ‘开通‘等等,都会定位不到,只能显示一个整体页面,这个就是WebView

Note:

① 可以理解与selenium里的iframe类似

②在右边定位里有明确的表示是 WebView

③点击一个链接后,有进度条加载后页面一般都是Webview.  也就是说,是一个H5页面了

④UI Automator 不能定位到里面的元素

处理方法1:

①执行  print(driver.contexts)  获取所有的上下文

②在切换到他的webview里面去(类似selenium里的切换窗口)

③获取到他的webview源码,在其他浏览器打开,获取他的xpath路径,或者其他定位方法

#coding:utf-8
from appium import webdriver
import time
u‘‘‘智行火车票,webview页面定位‘‘‘
desired_caps = {‘platformName‘: ‘Android‘,
                ‘deviceName‘: ‘9a762346‘,
                ‘platformVersion‘: ‘6.0.1‘,
                ‘noReset‘: True,
                ‘appPackage‘: ‘com.yipiao‘,
                ‘appActivity‘: ‘com.zt.main.entrance.ZTLaunchActivity‘}
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, desired_caps)
time.sleep(10)
print(driver.context)
driver.find_element_by_xpath(‘//*[@text="我的"]‘).click()
time.sleep(3)
driver.find_element_by_xpath(‘//*[@text="产品意见"]‘).click()
time.sleep(3)
print(driver.contexts)

driver._switch_to.context(‘WEBVIEW_com.yipiao‘)
print(‘切换成功‘)
p=driver.page_source
with open(‘1111.html‘,‘wb‘) as f:
    f.write(p.encode(‘utf-8‘))
time.sleep(2)
#driver.find_element_by_xpath("//*[contains(text(),‘【抢票】我能抢到票吗‘)]").click()
driver.find_element_by_xpath(".//*[@id=‘container‘]/div/div/section[2]/ul/li[2]/a/div[1]/span").click()

处理方法2:

主要是你已经确定他是一个webview,但是打印全部上下文返回的list里只有NATIVE_APP,无法进行切换。

就不要去切换了,当做是APP原生的,只需要定位到某个元素就行

这种情况不建议用获取源码,没太大用。

   

#coding:utf-8
from appium import webdriver
import time
u‘‘‘百度阅读,webview页面定位‘‘‘
desired_caps = {"platformName": "Android",
                "deviceName": "9a762346",
                "platformVersion": "6.0.1",
                "noReset": True,
                "appPackage": "com.baidu.yuedu",
                "appActivity": "com.baidu.yuedu.splash.SplashActivity"}
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, desired_caps)
time.sleep(10)
driver.find_element_by_accessibility_id(‘VIP‘).click()
time.sleep(3)
driver.find_element_by_accessibility_id("规则详情").click()

原文地址:https://www.cnblogs.com/luobobobo/p/9344641.html

时间: 2024-08-04 10:37:24

Python+Appium学习篇之WebView处理的相关文章

[python][django学习篇[13]]增加markdown_1

1 进入虚拟环境,安装markdwon  python install markdown 2 修改视图函数detail def detail(request, pk): # get_object_or_404当传入的pk对应的post数据存在时,就会返回post数据否则返回404 # 需要导入 import markdwon post = get_object_or_404(Post, pk=pk) post.body = markdown.markdown(post.body, extensi

[python][django学习篇][4]django完成数据库代码翻译:迁移数据库(migration)

上一篇我们已经完成数据库的设计,但是仅仅是python语言,并没有真正创建了数据库表.翻译成数据库语言,真正创建数据库表由django manage.py来实现,这一过程专业术语:迁移数据库 切换到manage.py所在目录,分别执行命令:python manage.py makemigrations , python manage.py migrate 执行python manage.py makemigrations结果 F:\pythoncode\django\workspace\blog

[python xml 学习篇][0]

tree = ET.parse("Result.xml")root = tree.getroot()print type(root)print root.tag # 得到root 标签print root.text #得到标签的值print root.attrib def parserResultXml(xmlfile): tree = ET.parse(xmlfile) result = tree.getroot()[0][1] for child in result: if chi

[python 函数学习篇]默认参数

python函数: 默认参数: retries=4 这种形式 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retri

Python+Appium学习之启动手机浏览器

一.启动浏览器:pycharm中python脚本如下: from appium import webdriver desired_caps ={'platformName':'Android','deviceName':'127.0.0.1:62001','platformVersion':'6.0','appPackage':'com.android.browser','appActivity':'com.android.browser.BrowserActivity'}webdriver.R

【Python基础学习篇十】Python正则表达式(2015-01-01)

一.正则表达式简介 正则表达式用于文本匹配的工具,在源字符串中查找与给定的正则表达式相匹配的部分.一个正则表达式是由字母.数字和特殊字符组成的.正则表达式中有许多特殊的字符,这些特殊字符是构成正则表达式的要素. 1.正则表达式中的特殊字符: 2.正则表达式中的常用限定符: 利用{}可以控制字符重复的次数. 例如,\d{1,4}表示1位到3位的数字: 某些地区的电话号码是8位数,区号也有可能是3位或4位数字. \d{3}-\d{8}|\d{4}-\d{7} 3.限定符与"?"的组合 二.

【Python基础学习篇】Python字典

字典(Dictionary)是由"键-值"对组成的集合,字典中的"值"通过"键"来引用. 一.字典的创建 字典由一系列的"键-值"(key-value)对组成,"键-值"对之间用"逗号"隔开,并且被包含在一对花括号中. 创建字典的格式如下: dictionary_name = {key1:value1,key2:value2,...} 如果需要创建一个空的字典,只需要一对花括号即可,如下

【Python基础学习篇八】Python函数

函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果. 一.函数的定义 函数的定义使用保留字def定义.函数在使用前必须定义,函数的类型即返回值的类型. Python函数定义的格式如下: def 函数名 (参数1[=默认值1],参数2[=默认值2]...): ... return 表达式 函数名可以是字母.数字或下划线组成的字符串,但不能以数字开头.函数的参数放在一对圆括号中,参数的个数可以有一个或多个,参数之间用逗号隔开,这种参数称之为形式参数. 例子: #!/usr/bin/e

【Python基础学习篇】Python序列

序列是具有索引和切片功能的集合.元组.列表和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力,因此元组.列表和字符串都属于序列. 例子:序列的索引功能 #!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v3.3 #Author: [email protected] #索引操作 tuple = ("apple","banana","grape","orange&