美文网首页
Appium定位混合应用WebView

Appium定位混合应用WebView

作者: test小星星 | 来源:发表于2019-08-21 22:36 被阅读0次

    前言

    混合应用是一种常见的app类型,主要是将web页面嵌套到app中

    测试准备


    操作步骤

    1. 手机(模拟器)与电脑连接,开启USB调试模式,通过adb devices可查看到此设备。
    adb connect 127.0.0.1:7555
    
    1. 电脑端、移动端安装chrome浏览器。(尽量保证移动端chrome版本与PC端一致)根据对应的Chrome浏览器版本安装对应的Chrome driver。

    2. 将下载的chromediver放到appium路径中

    • 如果是用appium server启动的服务放到如下路径
    C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
    
    • 如果是用appium-desktop启动的服务放到如下路径
    C:\Users\xxx\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
    
    1. 打开dr.fone app 进入web页面。(如图所示)


      image.png
    2. pc端打开Chrome浏览器输入:chrome://inspect/#devices 如图所示

      devices

    如果在 chrome://inspect/#devices 地址中,没有显示对应的webview,有可能未开启调试模式。

    开启方式
    • 在app中配置如下代码(在WebView类中调用静态方法setWebContentsDebuggingEnabled):
    if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {  
     WebView.setWebContentsDebuggingEnabled(true);
    

    注:此步骤,一般需要App开发人员开启。

    • 有些手机需要root权限
    • android 4.4+
    1. 执行脚本
    from time import sleep
    
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    caps = {}
    caps["platformName"] = "android"
    caps["deviceName"] = "mumu"
    caps["appPackage"] = "com.wondershare.drfone"
    caps["appActivity"] = "com.wondershare.drfone.ui.activity.WelcomeActivity"
    caps["autoGrantPermissions"] = True
    
    driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
    driver.implicitly_wait(15)
    
    
    # 点击BackupBtn
    driver.find_element_by_id('com.wondershare.drfone:id/btnBackup').click()
    
    WebDriverWait(driver,8).until(lambda x:x.find_element_by_id('com.wondershare.drfone:id/btnRecoverData'))
    # 点击NextBtn
    driver.find_element_by_id('com.wondershare.drfone:id/btnRecoverData').click()
    
    #等待webview页面显示
    WebDriverWait(driver,20).until(lambda x:x.find_element_by_class_name('android.webkit.WebView'))
    
    # 获取所有上下文
    contexts=driver.contexts
    print(contexts)
    
    sleep(10)
    # 切换上下文,进入webview页面
    driver.switch_to.context('WEBVIEW_com.wondershare.drfone')
    # 输入邮箱地址
    driver.find_element_by_id('email').send_keys('shuqing@wondershare.cn')
    # 点击sendBtn
    driver.find_element_by_class_name('btn_send').click()
    
    #切换上下文 (回到app原生页面)
    driver.switch_to.context('NATIVE_APP')
    # 点击返回
    driver.find_element_by_class_name('android.widget.ImageButton').click()
    

    补充 WebView 如何查找元素

    1. 使用原来(uiautomator)查找原生app的方式来查找元素
    2. 把webview的链接提取出来,通过pc的chrome打开链接,然后打开开发者工具找到元素使用selenium的方式定位
    3. 通过chrome://inspect/#devices方式查找元素(注意此方法需要梯子,否则无法打开)
      devices
      inspect

    相关文章

      网友评论

          本文标题:Appium定位混合应用WebView

          本文链接:https://www.haomeiwen.com/subject/jgswsctx.html