• 使用webview查找元素,appium查找web页面元素


    9 webview查找元素

    9.1 webview 简介

         WebViewandroid中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。

    9.2 移动端应用

    移动端,一般分为三种应用:

    Native应用:就是安卓的原生应用,普通APP。文件自带的文件管理、设置等APP

    Web应用:需要依托浏览器展示的网页应用,比如微信里的公众号、商城

    混合应用:也就是结合了原生和网页应用,在原生应用中嵌入网页。很多APP都是这样的,比如淘宝等

    那么为什么是要使用webview呢?前面第二章讲过UIAutomatorViewer的使用,UIAutomatorViewer是用来识别安卓原生应用的,它识别不到web网页的内容。所以如果你要测试的APP有网页应用,就需要用到webview来识别控件的idname等信息。

    ps:如果确定这个APP的页面是不是网页,一般情况下,长按文字可以出现复制粘贴的,网络不好的时候会出现一个缓慢加载的过程等一般都是web应用。

    9.3使用webview查找元素

    第一种方式需要翻墙:

    1.将手机连接到电脑上,打开USB调试,去cmd中输入adb devices会显示你的设备已连接 

    2.然后你打开要测试的网页版的APP,比如我打开微信里的一个商城

    3.从电脑端,打开chrome浏览器,输入chrome://inspect,打开,会显示你的手机型号,以及你打开的网页

     

            注意:1.如果你查找的不是web网页,webview是不会显示的,所以如果没显示,首先看下自己的页面是不是网页版;2.如果连手机型号都没出来,那说明手机没有连接上,重新关闭usb调试再打开试试,还是不行确定一下自己的驱动是不是装好了;3.这个只能适用安卓4.4版本以上的手机

    4.点击inspect,就会出来如图:

     

    5.点击图中的箭头,左侧是页面,右侧显示的是控件的信息。想看哪个APP,在手机上打开哪个APP即可。

    如果不能翻墙,还有一个方法就是将网页链接复制到电脑的浏览器,从电脑浏览器打开网页,点击右键--检查/查看元素,也可以找到元素信息。和之前selenium一样。

    9.4 appium查找网页元素

    找到了元素信息后,如何写代码让appium自动去找呢?

    连接手机的代码和find_element_XX都是一样的,只是有一个地方需要注意,appium默认都是按照原生应用查找的,如果想让它查找网页应用,就要告诉它接下来要查找网页应用了,用switch_to.context()方法:

    #coding=utf-8
    from appium import webdriver
    import time
    
    """连接手机,获取driver"""
    server = r'http://localhost:4723/wd/hub'  # Appium Server, 端口默认为4723
    desired_capabilities = {
        'platformName': 'Android',
        'deviceName': '127.0.0.1:62001',
        'platformVersion': '10',
        'appPackage': 'com.ddsy.songyao',
        'appActivity': '.activity.MainActivity',
        'unicodeKeyboard': True,
        'reserKeyBoard': True,
        'noReset': True,
        'fullReset': False
    }
    driver = webdriver.Remote(server, desired_capabilities)  # 连接手机和APP
    time.sleep(3)
    
    # 点击首页某个元素进入到某个网页版页面
    driver.find_element_by_xpath("//*[contains(@bounds, '[360,676][720,837]')]").click()
    time.sleep(5)
    
    # 获取当前网页页面的contexts
    contexts = driver.contexts
    for i in contexts:
        print(i)
    
    # 打印的contexts结果:
    # NATIVE_APP         # 一般情况原生的应用都是这个context
    # WEBVIEW_com.android.browser
    # 网页应用的context都是‘WEBVIEW_’开头的
    # 如果你的当前页面是原生的,那么只会打出来NATIVE_APP
    
    # 告诉appium接下来找到元素是网页的元素
    
    driver.switch_to.context("WEBVIEW_com.android.browser")
    # 下面的方法就一样了

    driver.find_element_by_id("网页元素的id").click()

    driver.find_element_by_xpath("//*[contains(@text, 'xxx").sendkeys('xx') #接下来回到原生应用

    driver.switch_to.context("NATIVE_APP")

    driver.find_element_by_id("安卓原生的id")
  • 相关阅读:
    ORA-28040: No matching authentication protocol
    kettle增量抽取数据--高效抽取方式
    为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?
    echarts饼图指示线文字换行
    数据库概论
    Java学习笔记
    案例分析
    软件工程作业3
    软件工程作业2
    软件工程作业1
  • 原文地址:https://www.cnblogs.com/sy_test/p/12703801.html
Copyright © 2020-2023  润新知