美文网首页
app内嵌web网页的操作(WebView)

app内嵌web网页的操作(WebView)

作者: 清水秋香 | 来源:发表于2020-03-01 01:17 被阅读0次
    查看webview中的网页元素
    (appium使用13版本)
    • 第一种情况:和测试应用webview不依赖app
      方法一:直接用chrome浏览器F12里面的手机模式打开对应的网页
    import time
    from selenium import webdriver
    #1打开电脑上的浏览器以手机模式运行
    chrome_options = webdriver.ChromeOptions()
    #2选择一种存在的模拟手机设备类型
    chrome_options.add_experimental_option(
        "mobileEmulation",
        {"deviceName": "iPhone X"})
    print(chrome_options.to_capabilities())
    #启动webdriver 添加配置项
    driver = webdriver.Chrome(desired_capabilities = chrome_options.to_capabilities())
    driver.implicitly_wait(10)
    driver.get('http://www.baidu.com')
    time.sleep(1)
    #设置浏览器窗口尺寸
    driver.set_window_size(411,731)
    element_keyword = driver.find_element_by_id("index-kw")
    # 输入字符
    element_keyword.click()
    element_keyword.send_keys('松勤\n')
    driver.quit()
    

    方法二:使用手机浏览器打开

    import time
    from appium import webdriver
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        'plathformVersion':'8',
        'deviceName':'test0106',
         #不需要指定包名和入口信息了,直接指定浏览器参数为Chrome,然后appium就会自动找到装的谷歌浏览器
        'browserName':'Chrome',
        'noReset':True,
        'newCommandTimeout':6000,
        'automationName':'UiAutomator2',
        #使用指定的浏览器驱动-匹配手机上的谷歌浏览器 浏览器版本查找设置关于chrome
        'chromedriverExecutableDir':'/Users/xxx/Desktop/xxx驱动'
    }
    #如果有其他浏览器(可以指定对应的驱动)自行获取package以及activity自行切换webview中
    #自动化程序运行在手机上,自动化驱动装在电脑上
    
    driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    #操作浏览器内容完全使用selenium的方式去自动化
    driver.get('http://www.baidu.com/')
    #用web查找元素的方式查找手机网页内部元素
    time.sleep(3)
    
    driver.find_element_by_id('index-kw').send_keys('xxx')
    driver.find_element_by_id('index-bn').click()
    
    
    • 第二种情况:被测应用webview与app原生有交互,依赖app
      准备工作:修改应用源代码,添加webview调用
    protected void onCreate(Bundle savedlnstanceState){
          super.onCreate(savedlnstanceState);
          WebView myWebView = (WebView)findViewById(R.id.jcywebview);
          myWebView.setWebContentsDebuggingEnabled(true);
    };
    
    

    每个webview加入 myWebView.setWebContentsDebuggingEnabled(true); 代码,通常一个app里只有一个webview,添加一处即可
    方法:通过chrome浏览器的远程调试功能

    详细步骤:
    确保被测app在手机上打开
    打开chrome浏览器,地址栏输入

    chrome://inspect
    

    手机打开被测app 在chrome://inspect页面会显示WebView,点击inspect 则可进行查看
    界面显示如下:

    QQ20200301-010506@2x.png
    注意:有的系统比较老得,比如android4.4对应的webview的版本比较老,比如33.0的,可能不能inspect,所以可以使用新一些的android版本
    from appium import webdriver
    
    # 准备自动化配置信息
    desired_caps = {
        'platformName': 'Android',
        'plathformVersion': '8',
        'deviceName': 'test0106',
        "appPackage": "com.example.jcy.wvtest",
        "appActivity": ".MainActivity",
        'noReset': True,
        'newCommandTimeout': 6000,
        'automationName': 'UiAutomator2',
        'chromedriverExecutableDir': '/Users/wgz/Desktop/webview'
    
    }
    
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    driver.implicitly_wait(10)
    
    # 查看当前手的context appium把所有的界面环境称之为context
    print(driver.contexts)
    # 如果处于NATIVE_APP 原生app
    if driver.current_context == 'NATIVE_APP':
        # webview部分的context则为WEBVIEW_xxxx,应用app包名
        driver.switch_to.context('WEBVIEW_com.example.jcy.wvtest')
    # 此时可以操作web元素了
    # driver.get('https://www.baidu.com/')
    # 用web查找元素的方式查找手机网页内部元素
    driver.find_element_by_id('index-kw').send_keys('松勤')
    driver.find_element_by_id('index-bn').click()
    
    res = driver.find_element_by_css_selector('#results>div:nth-child(1) header')
    print(driver.current_context)
    driver.switch_to.context('NATIVE_APP')
    print(driver.current_context)
    driver.find_element_by_accessibility_id('面板').click()
    

    相关文章

      网友评论

          本文标题:app内嵌web网页的操作(WebView)

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