zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Yii2安装任务调度扩展
    分享书籍[writing idiomatic python ebook]
    python待解决问题笔记
    dojo使用笔记: 自定义ConfirmDialog
    dojo使用疑难杂症集锦
    学习"大众点评网的架构设计与实践"
    一个前端html模板处理引擎(javascript)
    日历设计之重复事件规则设计
    TCP/IP之TCP的建立与终止
    python正则表达式
  • 原文地址:https://www.cnblogs.com/mabingxue/p/9846724.html
Copyright © 2011-2022 走看看