51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 716|回复: 0
打印 上一主题 下一主题

定位android WebView中的元素之Appium

[复制链接]
  • TA的每日心情
    擦汗
    4 小时前
  • 签到天数: 1047 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-2-6 15:11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Android APP中,若存在WebView来加载H5页面,使用appium进行元素定位时,需将webdriver的context切换成webview的context,此时才能正常的获取H5中元素,步骤参考如下:
      1.需原生APP中,增加如下代码(Application中即可):
    1.   WebView.setWebContentsDebuggingEnabled(true)
    复制代码


    2.此时启动webdriver,调用.contexts方法获得context list,打印的结果中会出现WEBVIEW_xxxxxxx的元素,这个元素即为webview的context,若无步骤1中设置项,打印中只有NATIVE_APP的元素;
    1. cts = driver.contexts
    2.   print(cts)
    3.   >>>>>>['NATIVE_APP', 'WEBVIEW_xxxx']
    复制代码


    3.webdriver对象调用.switch_to.context("WEBVIEW_xxxx")方法,切换到webview的context,调用.current_context方法,可以看到打印"WEBVIEW_xxxx";
    1. ct = driver.current_context
    2.   print("current context is :" + ct)
    3.   >>>>>>WEBVIEW_xxxx
    复制代码


    4.若调用.switch_to.context("WEBVIEW_xxxx")方法报类似以下错误,No Chromedriver found that can automate Chrome 'xx.xx.xx',此报错是因为Appium在运行过程中找不到安卓设备系统中自带Webview的chrome版本所对应版本的Chromedriver,导致了报错。
      我们需要找到与安卓系统中webview对应的chromedriver版本并更新到appium的安装目录中。
      步骤如下:
      1)手机(USB)链接电脑后,切换到含有webview的页面
      2)打开电脑浏览器,浏览器中输入chrome://inspect/#devices,
      3)页面中会提示如图所示信息

      此时可以看到当前手机的chromedriver版本为81.0.4404.71
      4)然后点击Chromedriver下载地址:ChromeDriver仓库 ,下载最新的81.0.4404.xxx的版本即可。(81.0.4404.xx可能找不到,下载81.0.4404这个版本最新的就行)
      5)下载下来后解压拿到文件chromedriver.exe文件,将该文件添加/替换到appium的安装目录下的\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win,可能原目录中不存在chromedriver\win这两层目录,需手动创建。
      6)经上述步骤后即可运行成功。
      5.再次运行python脚本,可以使用常规定位方式如classname来定位元素,
      code:
      h5中定义div标签为rg_form,此时可以通过如下方式来定位:
    1.   driver.find_element(AppiumBy.CLASS_NAME, 'rg_form')
    复制代码


    h5中定义input标签id为password,此时可以通过如下方式来定位:
    1.   driver.find_element(AppiumBy.ID, "password")
    复制代码



       6.若步骤5在定位元素发生错误,提示类似InvalidArgumentException: Message: invalid argument: invalid locator,则尝试在webdriver的启动方式中增加如下参数:
      desired_caps["chromeOptions"] = {'w3c': False}
      desired_caps["showChromedriverLog"] = True


      7.若想再切回原生app的context,只需webdriver对象调用.switch_to.context("NATIVE_APP")方法进行切换即可。
      其他:
      若android项目集成mpaas框架,直接运行debug版本的app或者运行带签名的debug包,就能获得WEBVIEW_xxxxxxx的context。



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 13:24 , Processed in 0.065310 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表