APP自动化测试-11.webview技术原理

吴欣然
2023-12-01

APP自动化测试-11.webview技术原理



前言

根据日志,简单记录webview运行的机制


脚本:

from time import sleep

import pytest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By


class TestHybrid:

    def setup(self):
        desired_caps = {
            "platformName": "android",
            "appium:deviceName": "b1f37e8e",
            "appium:appPackage": "io.appium.android.apis",
            "appium:appActivity": ".ApiDemos",
            "chromedriverExecutableDir": "/Users/gaozeyu/tools/chromedriverdir",
            "chromedriverChromeMappingFile": "/Users/gaozeyu/PycharmProjects/test_appium/testcase/mapping.json"
        }

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        # 设置隐式等待
        self.driver.implicitly_wait(10)

    def teardown(self):
        self.driver.quit()

    def test_hybrid(self):
        sleep(3)
        self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'Views').click()
        webview = "WebView"
        self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, f'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("{webview}").instance(0));').click()

        print(self.driver.contexts)
        # 切换上下文,由原生切换至webview
        self.driver.switch_to.context(self.driver.contexts[-1])
        self.driver.find_element(By.XPATH, '//*[@id="i_am_a_textbox"]').send_keys("this is a test message")

        # 窗口切换
        print(self.driver.window_handles)
        self.driver.find_element(By.XPATH, '//*[@id="i am a link"]').click()
        print(self.driver.window_handles)

        sleep(3)

        if __name__ == 'main':
            pytest.main()

一、获取webview

第一次调用webview脚本代码:

print(self.driver.contexts)

日志文件分析:

2022-08-11 09:03:28:560 [HTTP] --> GET /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/contexts
2022-08-11 09:03:28:560 [HTTP] {}
2022-08-11 09:03:28:561 [W3C (d2d0b17c)] Calling AppiumDriver.getContexts() with args: ["d2d0b17c-fb8b-4422-93e3-a65e327eefdb"]
2022-08-11 09:03:28:561 [AndroidDriver] Getting a list of available webviews
2022-08-11 09:03:28:565 [ADB] Running '/Users/gaozeyu/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e shell cat /proc/net/unix'
2022-08-11 09:03:28:630 [AndroidDriver] Parsed 1 active devtools socket: ["@webview_devtools_remote_12270"]
2022-08-11 09:03:28:631 [AndroidDriver] Collecting CDP data of 1 webview
2022-08-11 09:03:28:631 [AndroidDriver] Forwarding remote port webview_devtools_remote_12270 to a local port in range 10900..11000
2022-08-11 09:03:28:631 [AndroidDriver] You could use the 'webviewDevtoolsPort' capability to customize the starting port number
2022-08-11 09:03:28:636 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward tcp:10900 localabstract:webview_devtools_remote_12270'
2022-08-11 09:03:28:672 [ADB] Removing forwarded port socket connection: 10900 
2022-08-11 09:03:28:673 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward --remove tcp:10900'
2022-08-11 09:03:28:693 [AndroidDriver] CDP data collection completed
2022-08-11 09:03:28:693 [AndroidDriver] WEBVIEW_12270 mapped to pid 12270
2022-08-11 09:03:28:693 [AndroidDriver] Getting process name for webview 'WEBVIEW_12270'
2022-08-11 09:03:28:693 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e shell ps -A'
2022-08-11 09:03:28:821 [AndroidDriver] Got process name: 'io.appium.android.apis'
2022-08-11 09:03:28:822 [AndroidDriver] Found 1 webview: ["WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:28:822 [AndroidDriver] Available contexts: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:28:823 [W3C (d2d0b17c)] Responding to client with driver.getContexts() result: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:28:823 [HTTP] <-- GET /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/contexts 200 263 ms - 57

    1. appium server 接收到获取contexts的请求
[HTTP] --> GET /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/contexts
    1. 调用AppiumDriver.getContexts()方法,获取contexts,此时获取到1个可用的webview的list
[W3C (d2d0b17c)] Calling AppiumDriver.getContexts() with args: ["d2d0b17c-fb8b-4422-93e3-a65e327eefdb"]
[AndroidDriver] Getting a list of available webviews
    1. adb命令查看手机端的监听
adb -P 5037 -s b1f37e8e shell cat /proc/net/unix'
    1. 获取webview所有的socket
adb shell cat /proc/net/unix | grep webview
    1. 根据获取的webview的socket,查询进程
# pid为进程号
adb shell ps | grep pid
    1. 获取进程名称和webview,返回给客户端
[AndroidDriver] Got process name: 'io.appium.android.apis'
[AndroidDriver] Found 1 webview: ["WEBVIEW_io.appium.android.apis"]
[AndroidDriver] Available contexts: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
[W3C (d2d0b17c)] Responding to client with driver.getContexts() result: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
[HTTP] <-- GET /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/contexts 200 329 ms - 57

二、根据webview启动chromedriver

第二次调用webview脚本代码:

self.driver.switch_to.context(self.driver.contexts[-1])

日志分析:

2022-08-11 09:03:28:825 [HTTP] --> POST /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/context
2022-08-11 09:03:28:825 [HTTP] {"name":"WEBVIEW_io.appium.android.apis"}
2022-08-11 09:03:28:826 [W3C (d2d0b17c)] Calling AppiumDriver.setContext() with args: ["WEBVIEW_io.appium.android.apis","d2d0b17c-fb8b-4422-93e3-a65e327eefdb"]
2022-08-11 09:03:28:826 [AndroidDriver] Getting a list of available webviews
2022-08-11 09:03:28:827 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e shell cat /proc/net/unix'
2022-08-11 09:03:28:898 [AndroidDriver] Parsed 1 active devtools socket: ["@webview_devtools_remote_12270"]
2022-08-11 09:03:28:899 [AndroidDriver] Collecting CDP data of 1 webview
2022-08-11 09:03:28:899 [AndroidDriver] Forwarding remote port webview_devtools_remote_12270 to a local port in range 10900..11000
2022-08-11 09:03:28:899 [AndroidDriver] You could use the 'webviewDevtoolsPort' capability to customize the starting port number
2022-08-11 09:03:28:900 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward tcp:10900 localabstract:webview_devtools_remote_12270'
2022-08-11 09:03:28:926 [ADB] Removing forwarded port socket connection: 10900 
2022-08-11 09:03:28:927 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward --remove tcp:10900'
2022-08-11 09:03:28:945 [AndroidDriver] CDP data collection completed
2022-08-11 09:03:28:946 [AndroidDriver] WEBVIEW_12270 mapped to pid 12270
2022-08-11 09:03:28:946 [AndroidDriver] Getting process name for webview 'WEBVIEW_12270'
2022-08-11 09:03:28:946 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e shell ps -A'
2022-08-11 09:03:29:061 [AndroidDriver] Got process name: 'io.appium.android.apis'
2022-08-11 09:03:29:062 [AndroidDriver] Found 1 webview: ["WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:29:062 [AndroidDriver] Available contexts: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:29:062 [AndroidDriver] Connecting to chrome-backed webview context 'WEBVIEW_io.appium.android.apis'
2022-08-11 09:03:29:064 [AndroidDriver] A port was not given, using random free port: 8000
2022-08-11 09:03:29:064 [AndroidDriver] Passing web view details to the Chromedriver constructor: {
2022-08-11 09:03:29:064 [AndroidDriver]   "info": {
2022-08-11 09:03:29:064 [AndroidDriver]     "Android-Package": "io.appium.android.apis",
2022-08-11 09:03:29:064 [AndroidDriver]     "Browser": "Chrome/92.0.4515.131",
2022-08-11 09:03:29:064 [AndroidDriver]     "Protocol-Version": "1.3",
2022-08-11 09:03:29:064 [AndroidDriver]     "User-Agent": "Mozilla/5.0 (Linux; Android 11; Redmi K30 5G Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36",
2022-08-11 09:03:29:064 [AndroidDriver]     "V8-Version": "9.2.230.22",
2022-08-11 09:03:29:064 [AndroidDriver]     "WebKit-Version": "537.36 (@6b8d6c56ce21e38a72f7c4becb5abc1fa5134f29)",
2022-08-11 09:03:29:064 [AndroidDriver]     "webSocketDebuggerUrl": "ws://127.0.0.1:10900/devtools/browser"
2022-08-11 09:03:29:065 [AndroidDriver]   },
2022-08-11 09:03:29:065 [AndroidDriver]   "process": {
2022-08-11 09:03:29:065 [AndroidDriver]     "name": "io.appium.android.apis",
2022-08-11 09:03:29:065 [AndroidDriver]     "id": "12270"
2022-08-11 09:03:29:065 [AndroidDriver]   }
2022-08-11 09:03:29:065 [AndroidDriver] }
2022-08-11 09:03:29:065 [AndroidDriver] Automated Chromedriver download is disabled. Use 'chromedriver_autodownload' server feature to enable it
2022-08-11 09:03:29:066 [AndroidDriver] Precalculated Chromedriver capabilities: {
2022-08-11 09:03:29:066 [AndroidDriver]   "androidPackage": "io.appium.android.apis",
2022-08-11 09:03:29:066 [AndroidDriver]   "androidUseRunningApp": true,
2022-08-11 09:03:29:066 [AndroidDriver]   "androidProcess": "io.appium.android.apis",
2022-08-11 09:03:29:067 [AndroidDriver]   "androidDeviceSerial": "b1f37e8e"
2022-08-11 09:03:29:067 [AndroidDriver] }
2022-08-11 09:03:29:067 [AndroidDriver] Before starting chromedriver, androidPackage is 'io.appium.android.apis'
2022-08-11 09:03:29:067 [Chromedriver] Changed state to 'starting'
2022-08-11 09:03:29:067 [Chromedriver] Attempting to use Chromedriver->Chrome mapping from '/Users/test/PycharmProjects/test_appium/testcase/mapping.json'
2022-08-11 09:03:29:069 [Chromedriver] The most recent known Chrome version: 104.0.5112
2022-08-11 09:03:29:072 [Chromedriver] Found 131 executables in '/Users/test/tools/chromedriverdir'
Chromedriver binary. Make sure it returns a valid version string in response to '--version/]' command line argument. spawn Unknown system error -86
2022-08-11 09:03:29:666 [Chromedriver] Cannot retrieve version number from 'mapping.json' Chromedriver binary. Make sure it returns a valid version string in response to '--version' command line argument. spawn /Users/gaozeyu/tools/chromedriverdir/mapping.json EACCES
2022-08-11 09:03:29:684 [Chromedriver] The following Chromedriver executables were found:
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-93-0-4577-63' (version '93.0.4577.63', minimum Chrome version '93.0.4577')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-93-0-4577-15' (version '93.0.4577.15', minimum Chrome version '93.0.4577')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107' (version '92.0.4515.107', minimum Chrome version '92.0.4515')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-43' (version '92.0.4515.43', minimum Chrome version '92.0.4515')
2022-08-11 09:03:29:695 [Chromedriver] Browser version in the supplied details: Chrome/92.0.4515.131
2022-08-11 09:03:29:695 [Chromedriver] Found Chrome bundle 'undefined' version '92.0.4515'
2022-08-11 09:03:29:696 [Chromedriver] Found 2 executables capable of automating Chrome '92.0.4515'.
2022-08-11 09:03:29:696 [Chromedriver] Choosing the most recent, '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107'.
2022-08-11 09:03:29:696 [Chromedriver] If a specific version is required, specify it with the `chromedriverExecutable`desired capability.
2022-08-11 09:03:29:697 [Chromedriver] Set chromedriver binary as: /Users/gaozeyu/tools/chromedriverdir/chromedriver-92-0-4515-107
2022-08-11 09:03:29:697 [Chromedriver] Killing any old chromedrivers, running: pkill -15 -f "/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107.*--port=8000"
2022-08-11 09:03:29:735 [Chromedriver] No old chromedrivers seem to exist
2022-08-11 09:03:29:735 [Chromedriver] Cleaning this device\'s adb forwarded port socket connections: b1f37e8e
2022-08-11 09:03:29:735 [ADB] List forwarding ports
2022-08-11 09:03:29:735 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward --list'
2022-08-11 09:03:29:752 [Chromedriver] Spawning chromedriver with: /Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107 --url-base=wd/hub --port=8000 --adb-port=5037 --verbose
2022-08-11 09:03:29:764 [Chromedriver] Chromedriver version: '92.0.4515.107'
2022-08-11 09:03:29:765 [WD Proxy] Matched '/status' to command name 'getStatus'
2022-08-11 09:03:29:766 [WD Proxy] Proxying [GET /status] to [GET http://127.0.0.1:8000/wd/hub/status] with no body
2022-08-11 09:03:29:773 [WD Proxy] Got response with status 200: {"value":{"build":{"version":"92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634})"},"message":"ChromeDriver ready for new sessions.","os":{"arch":"x86_64","name":"Mac OS X","version":"12.3.1"},"ready":true}}
2022-08-11 09:03:29:773 [Chromedriver] Starting W3C Chromedriver session with capabilities: {
2022-08-11 09:03:29:773 [Chromedriver]   "capabilities": {
2022-08-11 09:03:29:773 [Chromedriver]     "alwaysMatch": {
2022-08-11 09:03:29:773 [Chromedriver]       "goog:chromeOptions": {
2022-08-11 09:03:29:773 [Chromedriver]         "androidPackage": "io.appium.android.apis",
2022-08-11 09:03:29:773 [Chromedriver]         "androidUseRunningApp": true,
2022-08-11 09:03:29:773 [Chromedriver]         "androidProcess": "io.appium.android.apis",
2022-08-11 09:03:29:773 [Chromedriver]         "androidDeviceSerial": "b1f37e8e"
2022-08-11 09:03:29:773 [Chromedriver]       },
2022-08-11 09:03:29:773 [Chromedriver]       "goog:loggingPrefs": {
2022-08-11 09:03:29:774 [Chromedriver]         "browser": "ALL"
2022-08-11 09:03:29:774 [Chromedriver]       }
2022-08-11 09:03:29:774 [Chromedriver]     }
2022-08-11 09:03:29:774 [Chromedriver]   }
2022-08-11 09:03:29:774 [Chromedriver] }
2022-08-11 09:03:29:774 [WD Proxy] Matched '/session' to command name 'createSession'
2022-08-11 09:03:29:774 [WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"capabilities":{"alwaysMatch":{"goog:chromeOptions":{"androidPackage":"io.appium.android.apis","androidUseRunningApp":true,"androidProcess":"io.appium.android.apis","androidDeviceSerial":"b1f37e8e"},"goog:loggingPrefs":{"browser":"ALL"}}}}
2022-08-11 09:03:30:043 [Chromedriver] Webview version: 'Chrome/92.0.4515.131'
2022-08-11 09:03:30:102 [WD Proxy] Got response with status 200: {"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"92.0.4515.131","chrome":{"chromedriverVersion":"92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634})"},"goog:chromeOptions":{"debuggerAddress":"localhost:61565"},"pageLoadStrategy":"normal","platformName":"android","proxy":{},"setWindowRect":false,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":false,"webauthn:extension:largeBlob":false,"webauthn:virtualAuthenticators":false},"sessionId":"a650da032b9d8e2475052559bee24982"}}
2022-08-11 09:03:30:103 [WD Proxy] Determined the downstream protocol as 'W3C'
2022-08-11 09:03:30:103 [Chromedriver] Changed state to 'online'
2022-08-11 09:03:30:103 [W3C (d2d0b17c)] Responding to client with driver.setContext() result: null
2022-08-11 09:03:30:104 [HTTP] <-- POST /wd/hub/session/d2d0b17c-fb8b-4422-93e3-a65e327eefdb/context 200 1278 ms - 14
    1. 根据获取到的webview进程和进程ID,把参数传给chromedriver的构造器
2022-08-11 09:03:28:946 [AndroidDriver] WEBVIEW_12270 mapped to pid 12270
2022-08-11 09:03:28:946 [AndroidDriver] Getting process name for webview 'WEBVIEW_12270'
2022-08-11 09:03:28:946 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e shell ps -A'
2022-08-11 09:03:29:061 [AndroidDriver] Got process name: 'io.appium.android.apis'
2022-08-11 09:03:29:062 [AndroidDriver] Found 1 webview: ["WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:29:062 [AndroidDriver] Available contexts: ["NATIVE_APP","WEBVIEW_io.appium.android.apis"]
2022-08-11 09:03:29:062 [AndroidDriver] Connecting to chrome-backed webview context 'WEBVIEW_io.appium.android.apis'
2022-08-11 09:03:29:064 [AndroidDriver] A port was not given, using random free port: 8000
2022-08-11 09:03:29:064 [AndroidDriver] Passing web view details to the Chromedriver constructor: {
2022-08-11 09:03:29:064 [AndroidDriver]   "info": {
2022-08-11 09:03:29:064 [AndroidDriver]     "Android-Package": "io.appium.android.apis",
2022-08-11 09:03:29:064 [AndroidDriver]     "Browser": "Chrome/92.0.4515.131",
2022-08-11 09:03:29:064 [AndroidDriver]     "Protocol-Version": "1.3",
2022-08-11 09:03:29:064 [AndroidDriver]     "User-Agent": "Mozilla/5.0 (Linux; Android 11; Redmi K30 5G Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36",
2022-08-11 09:03:29:064 [AndroidDriver]     "V8-Version": "9.2.230.22",
2022-08-11 09:03:29:064 [AndroidDriver]     "WebKit-Version": "537.36 (@6b8d6c56ce21e38a72f7c4becb5abc1fa5134f29)",
2022-08-11 09:03:29:064 [AndroidDriver]     "webSocketDebuggerUrl": "ws://127.0.0.1:10900/devtools/browser"
2022-08-11 09:03:29:065 [AndroidDriver]   },
2022-08-11 09:03:29:065 [AndroidDriver]   "process": {
2022-08-11 09:03:29:065 [AndroidDriver]     "name": "io.appium.android.apis",
2022-08-11 09:03:29:065 [AndroidDriver]     "id": "12270"
2022-08-11 09:03:29:065 [AndroidDriver]   }
2022-08-11 09:03:29:065 [AndroidDriver] }
2022-08-11 09:03:29:065 [AndroidDriver] Automated Chromedriver download is disabled. Use 'chromedriver_autodownload' server feature to enable it
2022-08-11 09:03:29:066 [AndroidDriver] Precalculated Chromedriver capabilities: {
2022-08-11 09:03:29:066 [AndroidDriver]   "androidPackage": "io.appium.android.apis",
2022-08-11 09:03:29:066 [AndroidDriver]   "androidUseRunningApp": true,
2022-08-11 09:03:29:066 [AndroidDriver]   "androidProcess": "io.appium.android.apis",
2022-08-11 09:03:29:067 [AndroidDriver]   "androidDeviceSerial": "b1f37e8e"
2022-08-11 09:03:29:067 [AndroidDriver] }
    1. 根据chromedriverChromeMappingFile定义的mapping文件,在chromedriverExecutableDir定义的目录中查找对应app中chromedriver版本
2022-08-11 09:03:29:067 [Chromedriver] Changed state to 'starting'
2022-08-11 09:03:29:067 [Chromedriver] Attempting to use Chromedriver->Chrome mapping from '/Users/test/PycharmProjects/test_appium/testcase/mapping.json'
2022-08-11 09:03:29:069 [Chromedriver] The most recent known Chrome version: 104.0.5112
2022-08-11 09:03:29:072 [Chromedriver] Found 131 executables in '/Users/test/tools/chromedriverdir'
Chromedriver binary. Make sure it returns a valid version string in response to '--version/]' command line argument. spawn Unknown system error -86
2022-08-11 09:03:29:666 [Chromedriver] Cannot retrieve version number from 'mapping.json' Chromedriver binary. Make sure it returns a valid version string in response to '--version' command line argument. spawn /Users/gaozeyu/tools/chromedriverdir/mapping.json EACCES
2022-08-11 09:03:29:684 [Chromedriver] The following Chromedriver executables were found:
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-93-0-4577-63' (version '93.0.4577.63', minimum Chrome version '93.0.4577')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-93-0-4577-15' (version '93.0.4577.15', minimum Chrome version '93.0.4577')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107' (version '92.0.4515.107', minimum Chrome version '92.0.4515')
2022-08-11 09:03:29:689 [Chromedriver]     '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-43' (version '92.0.4515.43', minimum Chrome version '92.0.4515')
2022-08-11 09:03:29:695 [Chromedriver] Browser version in the supplied details: Chrome/92.0.4515.131
2022-08-11 09:03:29:695 [Chromedriver] Found Chrome bundle 'undefined' version '92.0.4515'
2022-08-11 09:03:29:696 [Chromedriver] Found 2 executables capable of automating Chrome '92.0.4515'.
2022-08-11 09:03:29:696 [Chromedriver] Choosing the most recent, '/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107'.
    1. 匹配版本完成后,先kill掉对应版本的chromedriver进程,然后以默认8000端口,启动chromedriver
2022-08-11 09:03:29:697 [Chromedriver] Killing any old chromedrivers, running: pkill -15 -f "/Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107.*--port=8000"
2022-08-11 09:03:29:735 [Chromedriver] No old chromedrivers seem to exist
2022-08-11 09:03:29:735 [Chromedriver] Cleaning this device\'s adb forwarded port socket connections: b1f37e8e
2022-08-11 09:03:29:735 [ADB] List forwarding ports
2022-08-11 09:03:29:735 [ADB] Running '/Users/test/Library/Android/sdk/platform-tools/adb -P 5037 -s b1f37e8e forward --list'
2022-08-11 09:03:29:752 [Chromedriver] Spawning chromedriver with: /Users/test/tools/chromedriverdir/chromedriver-92-0-4515-107 --url-base=wd/hub --port=8000 --adb-port=5037 --verbose
2022-08-11 09:03:29:764 [Chromedriver] Chromedriver version: '92.0.4515.107'
    1. 本地的get Status和启动的8000/status进行映射,获取状态
2022-08-11 09:03:29:765 [WD Proxy] Matched '/status' to command name 'getStatus'
2022-08-11 09:03:29:766 [WD Proxy] Proxying [GET /status] to [GET http://127.0.0.1:8000/wd/hub/status] with no body
2022-08-11 09:03:29:773 [WD Proxy] Got response with status 200: {"value":{"build":{"version":"92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634})"},"message":"ChromeDriver ready for new sessions.","os":{"arch":"x86_64","name":"Mac OS X","version":"12.3.1"},"ready":true}}
    1. 本地的createSession与/session进行映射,根据capabilities参数创建session,,返回sessionId
2022-08-12 08:05:05:762 [Chromedriver] Starting W3C Chromedriver session with capabilities: {
2022-08-12 08:05:05:762 [Chromedriver]   "capabilities": {
2022-08-12 08:05:05:762 [Chromedriver]     "alwaysMatch": {
2022-08-12 08:05:05:762 [Chromedriver]       "goog:chromeOptions": {
2022-08-12 08:05:05:762 [Chromedriver]         "androidPackage": "io.appium.android.apis",
2022-08-12 08:05:05:762 [Chromedriver]         "androidUseRunningApp": true,
2022-08-12 08:05:05:762 [Chromedriver]         "androidProcess": "io.appium.android.apis",
2022-08-12 08:05:05:762 [Chromedriver]         "androidDeviceSerial": "b1f37e8e"
2022-08-12 08:05:05:763 [Chromedriver]       },
2022-08-12 08:05:05:763 [Chromedriver]       "goog:loggingPrefs": {
2022-08-12 08:05:05:763 [Chromedriver]         "browser": "ALL"
2022-08-12 08:05:05:763 [Chromedriver]       }
2022-08-12 08:05:05:763 [Chromedriver]     }
2022-08-12 08:05:05:763 [Chromedriver]   }
2022-08-12 08:05:05:763 [Chromedriver] }
2022-08-12 08:05:05:763 [WD Proxy] Matched '/session' to command name 'createSession'
2022-08-12 08:05:05:763 [WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"capabilities":{"alwaysMatch":{"goog:chromeOptions":{"androidPackage":"io.appium.android.apis","androidUseRunningApp":true,"androidProcess":"io.appium.android.apis","androidDeviceSerial":"b1f37e8e"},"goog:loggingPrefs":{"browser":"ALL"}}}}
2022-08-12 08:05:06:031 [Chromedriver] Webview version: 'Chrome/92.0.4515.131'
2022-08-12 08:05:06:101 [WD Proxy] Got response with status 200: {"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"92.0.4515.131","chrome":{"chromedriverVersion":"92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634})"},"goog:chromeOptions":{"debuggerAddress":"localhost:59524"},"pageLoadStrategy":"normal","platformName":"android","proxy":{},"setWindowRect":false,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":false,"webauthn:extension:largeBlob":false,"webauthn:virtualAuthenticators":false},"sessionId":"02fc7705e267e9cc53a63f8500b68c7e"}
2022-08-12 08:05:06:102 [WD Proxy] Determined the downstream protocol as 'W3C'
2022-08-12 08:05:06:102 [Chromedriver] Changed state to 'online'
2022-08-12 08:05:06:102 [WD Proxy] Determined the downstream protocol as 'W3C'
2022-08-12 08:05:06:102 [Chromedriver] Changed state to 'online'
2022-08-12 08:05:06:102 [W3C (f90fdb4c)] Responding to client with driver.setContext() result: null
2022-08-12 08:05:06:103 [HTTP] <-- POST /wd/hub/session/f90fdb4c-ffed-4ba3-8b38-b9e2c986f357/context 200 1543 ms - 14
    1. 后续日志为元素定位,与web端一致

总结

appium操作webview基本就是接受客户端的请求,然后appium-server把请求转发给chrome-driver,进行操作,底层还是selenium

 类似资料: