zoukankan      html  css  js  c++  java
  • Python+Appium学习篇之WebView处理

    本文转自:https://www.cnblogs.com/luobobobo/p/9344641.html

    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()
  • 相关阅读:
    算法描述》关于LIS的nlogn方法
    简单tarjan》一道裸题(BZOJ1051)(easy)
    值得一做》关于数学与递推 BZOJ1002 (BZOJ第一页计划)(normal+)
    值得一做》关于一道DP+SPFA的题 BZOJ1003 (BZOJ第一页计划) (normal-)
    图论算法》关于最大流转最短路两三事
    刷题向》图论》BZOJ1001 平面图最大流、平面图最小割、单源最短路(easy+)
    c++中结构体的使用
    c++的标准流入流出和使用例子
    小知识 ——引用
    小知识——关于数组指针和指针数组
  • 原文地址:https://www.cnblogs.com/star12111/p/9975705.html
Copyright © 2011-2022 走看看