亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始

系統 1706 0

?簡介

  通過上一篇宏哥給各位小伙伴們的引薦,大家移動對這位美女有了深刻的認識,而且她那高超的技藝和婀娜的身姿久久地浮現在你的腦海里,是不是這樣呢???不要害羞直接告訴宏哥:是,就對了。宏哥要的就是這個效果。達到這個效果,就說明你學的差不多了,可以出師了。今天繼續由宏哥給你引薦這位琵琶美女。

說明:Appium--奴家的大號,提起奴家的大號在江湖上也是無人不知,無人不曉。奴家==Appium;

1、界面認識(奴家外表)

  在之前安裝appium的時候說過我們有兩種方法安裝,也就有兩種結果,一種是有界面的(客戶端安裝),一種是沒有界面的(終端安裝),首先我們先講一下有界面的,以及界面有哪些東西。

  首先和宏哥看一下琵琶女的外表,如果你的是windows系統那么界面就應該是這樣的,所以當你發現你的和我的琵琶女不一樣也不用擔心,這個就是所謂的“龍生九子,各有不同”,但是正常windows版整個界面只有7個按鈕,宏哥會按照從左到右從上到下的順序講。

(mac的會有一定的差異,但并不是很大,只是排版和樣式的問題,但是功能都一樣。)

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第1張圖片

1)Android Settings:左邊的第一個按鈕,主要是配置android的相關設置,他里面的結構圖我們看下張圖片

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第2張圖片

a. Application Path: 選擇路徑,選擇需要測試的app在本電腦存放的一個路徑。在啟動appium時他會默認去該路徑下去尋找這個app,然后將他安裝到指定的手機上。

b. Package: 之前提到過的,我們這個包的身份證,我們需要通過這個去找到包,不然我們安裝后我們通過什么去辨別這些包呢?

c. Launch Activity :故名思義,啟動的activity,activity的時候提到過,我們啟動app時需要去運行的activity,這里我們填寫首次啟動頁面的activity。

備注:這里需要注意一個問題在我們每次通過Choose選擇apk后,appium會自動把這個包進行重新簽名,那么在package以及activity里面會自動把包名和activity的名稱列進去,但是這里會出現一個問題,每次選擇apk后列表中會有一個緩存的原因,即使你更改了apk,但是package還是沒有變,這樣啟動的時候就一直報錯,遇見這樣的情況不要著急,重新啟動兩次就好。

d. Wait for Activity: 和上面的差不多,意思是等待某個Activity打開,用的時間不是很多,做了解。

e. Launch Device: 標簽下面的東西用得相對比較少,后面大家可以去了解一下。

f. Capabilities: 該標簽下和我們做自動化關系很大,后面我們做自動化時如何配置啟動app等信息就用的該標簽下的數據。? ? ? ? ?

g. Platform Name: 我們測試的app的類型,ios選擇ios,android選擇Android就好。

h. Automation Name: 測試引擎的名稱,我們使用的是appium,所以你第一眼就能看見Appium,但是他還有一個Selendroid??赡芸吹竭@里會有一些疑惑,為什么appium要選擇兩套系統呢?其實這個應該追溯到android的版本問題,android自己的工具在4.2版本以前是一個,但是后面進行了更新,可能也正是因為這個原因appium也才采用了兩套,所以當你測試的app安裝的機器時在4.0或之前的版本時那么這里的引擎你就必須選擇Selendroid,是否這樣大家可以動手去試一試。檢驗真理的唯一標準就是自己動手嘗試。

i. Platform Version: 安裝應用手機的版本號,android的是幾點幾的版本。

j. Device Name: 設備名稱。

備注:這里會有一個問題,如果你測試android時,只把一臺手機插入到電腦,即使你輸入的Device Name是錯誤的,但是你依然能夠正常安裝,使用。但是ios是不行的。不知道在設計的時候是否就是如此考慮的,如果在以后使用中遇見類似問題大家不要驚慌。

k. Advanced 標簽下的東西在初級階段不用擔心,這個標簽只是在你想同一臺電腦同時控制多臺手機的時候才能使用,需要更改Bootstrap Port的端口號,記住這一點就好。

2)General Setting:

在General Setting里面在通常情況下我們使用默認設置就好,但還是有一些基礎設置可以進行調整,方便后期的學習。整個頁面分成了Server和log兩部分,默認的情況如下面圖片。

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第3張圖片 ? ? ? ??

a. Server Address: 配置appium服務的地址,正常情況我們不需要更改,但是如果我們需要配置多臺手機的時候啟動了多個appium服務,那么這里的端口號我們需要進行調整,如果你多個都弄的同一個端口會報錯。

b. Override Existing Session: session覆蓋,可能對于初學者不理解什么叫session,你這里暫時理解為會話,我和你會話的唯一標示。

c. Log To File: 默認狀態是沒有任何數據,但是在做自動化時建議選擇,因為選擇之后appium在運行時產生的日志都會保留到你設置的問題件,這個對后期的bug定位有相當大的幫助。切記!

3)開發者設置(左邊第三個按鈕,小人圖標)很少用,可以忽略。如果有興趣可以作為興趣了解一下。

4)關于(左邊第四個按鈕,問號圖標),查看當前appium的版本信息。

5)元素偵測(右邊第二個按鈕,放大鏡圖標):這個按鈕的功能和firebug的定位工具功能類似,但是他還有一個功能,他會檢測你的各個系統配置是否正確,如果前面各項參數不正確時,使用該功能會報錯。如果你不正常連接手機也不行。還是建議用sdk工具里面自帶的uiautomatorviewer。

6)啟動服務(右邊第一個按鈕,三角圖標):所有參數配置好后你需要做的就是啟動appium服務,只有啟動之后你才能夠做自動化。

7)清除日志(右下角,垃圾桶圖標):在寫腳本、調試過程中會產生很多的日志,但是你可能想看的只是中間某個時間段的,那么你在這個時候可以將頁面的日志清除。

2、日志分析(奴家語言)

  通過前面的學習加上自己動手練習我相信很多小伙伴都能夠將appium啟動起來,并且會自動將app安裝到手機或者模擬器,但是這個時候很多人看見appium的面板或者控制臺會比較頭疼。appium服務頁面不斷的在滾動日志,但是又看不懂,這個可能是通病。下面我們來分析一下這個日志,我們下面大概來解讀一下我這個日志,讓自己不再迷茫。在每一行的上面我來配置解讀,讓大家更容易理解。

我啟動appium服務,指定了ip、端口、以及我的uid

192:~ ytxu$ appium -a 127.0.0.1 -p 4723 -U 127.0.0.1:62001

啟動成功

[Appium] Welcome to Appium v1.6.3

[Appium] Non-default server args:

啟動成功后的服務地址

[Appium] ? address: ‘127.0.0.1'

我們的uid,因為我這里是鏈接的模擬器所以用的這個IP

[Appium] ? udid: '127.0.0.1:62001'

[Appium] Deprecated server args:

系統自動拼接成字典的形式

[Appium] ? -U,--udid => --default-capabilities '{"udid":"127.0.0.1:62001"}'

[Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities:

[Appium] ? udid: ‘127.0.0.1:62001'

REST http接口監聽的是哪個端口

[Appium] Appium REST http interface listener started on 127.0.0.1:4723

通過POST的方式創建了一個session,這個session里面的值就是我們在配置app時的一些數據,這里系統把他自動轉換成了字典的形式,一個key對應一個value。仔細去看你會發現都不陌生。

            [HTTP] --> POST /wd/hub/session {
            
              "
            
            
              requiredCapabilities
            
            
              "
            
            :{},
            
              "
            
            
              desiredCapabilities
            
            
              "
            
            :{
            
              "
            
            
              deviceName
            
            
              "
            
            :
            
              "
            
            
              127.0.0.1:62001
            
            
              "
            
            ,
            
              "
            
            
              app
            
            
              "
            
            :
            
              "
            
            
              /Users/ytxu/Desktop/AppiumPython/apps/mukewang.apk
            
            
              "
            
            ,
            
              "
            
            
              autoLaunch
            
            
              "
            
            :
            
              "
            
            
              true
            
            
              "
            
            ,
            
              "
            
            
              platformVersion
            
            
              "
            
            :
            
              "
            
            
              4.1
            
            
              "
            
            ,
            
              "
            
            
              appPackage
            
            
              "
            
            :
            
              "
            
            
              cn.com.open.mooc
            
            
              "
            
            ,
            
              "
            
            
              platformName
            
            
              "
            
            :
            
              "
            
            
              Android
            
            
              "
            
            ,
            
              "
            
            
              appActivity
            
            
              "
            
            :
            
              "
            
            
              cn.com.open.mooc.index.splash.MCSplashActivity
            
            
              "
            
            
              }}

[debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{“deviceName
            
            
              "
            
            
              :
            
            
              "
            
            
              127.0
            
            .
            
              0.1
            
            :
            
              62001
            
            
              "
            
            
              ,
            
            
              "
            
            app
            
              "
            
            
              :
            
            
              "
            
            /Users/ytxu/Desktop/AppiumPython/apps/mukewang.apk
            
              "
            
            
              ,
            
            
              "
            
            autoLaunch
            
              "
            
            
              :
            
            
              "
            
            
              true
            
            
              "
            
            
              ,
            
            
              "
            
            platformVersion
            
              "
            
            
              :
            
            
              "
            
            
              4.1
            
            
              "
            
            
              ,
            
            
              "
            
            appPackage
            
              "
            
            
              :
            
            
              "
            
            cn.com.open.mooc
            
              "
            
            
              ,
            
            
              "
            
            platformName
            
              "
            
            
              :
            
            
              "
            
            Android
            
              "
            
            
              ,
            
            
              "
            
            appActivity
            
              "
            
            
              :
            
            
              "
            
            cn.com.open.mooc.index.splash.MCSplashActivity
            
              "
            
            
              },{},null,null,null]
            
          

創建一個會話,準備開始對話,把開始填寫的數據,傳入數據后用服務端驗證,如果成功就會話開始。

            [Appium] Creating 
            
              new
            
            
               AndroidDriver session

[Appium] Capabilities:

[Appium]   deviceName: 
            
            
              '
            
            
              127.0.0.1:62001
            
            
              '
            
            
              

[Appium]   app: 
            
            
              '
            
            
              /Users/ytxu/Desktop/AppiumPython/apps/mukewang.apk
            
            
              '
            
            
              

[Appium]   autoLaunch: 
            
            
              '
            
            
              true
            
            
              '
            
            
              

[Appium]   platformVersion: 
            
            
              '
            
            
              4.1
            
            
              '
            
            
              

[Appium]   appPackage: 
            
            
              '
            
            
              cn.com.open.mooc
            
            
              '
            
            
              

[Appium]   platformName: 
            
            
              '
            
            
              Android
            
            
              '
            
            
              

[Appium]   appActivity: 
            
            
              '
            
            
              cn.com.open.mooc.index.splash.MCSplashActivity
            
            
              '
            
            
              

[Appium]   udid: 
            
            
              '
            
            
              127.0.0.1:62001
            
            
              '
            
            
              

[debug] [AndroidDriver] AndroidDriver version: 
            
            
              1.10
            
            .
            
              38
            
          

看到這里你是否還覺得這個很麻煩?其實只要你仔細去看你會很容易都了解的。可能這里會有小伙伴說這個啟動的很容易,但是在實際中遇見的問題就沒這么容易了,那么下面我們看一個實際遇見的問題,直接看日志:

            
               1
            
             debug] [ADB] We tried to start an activity that doesn
            
              '
            
            
              t exist, retrying with . prepended to activity
            
            
               2
            
            
               3
            
             [debug] [ADB] Device API level: 
            
              19
            
            
               4
            
            
               5
            
            
              [debug] [ADB] Getting connected devices...

            
            
               6
            
            
               7
            
             [debug] [ADB] 
            
              1
            
            
               device(s) connected

            
            
               8
            
            
               9
            
             [debug] [ADB] Running 
            
              '
            
            
              /Users/ytxu/Library/Android/sdk/platform-tools/adb
            
            
              '
            
             with args: [
            
              "
            
            
              -P
            
            
              "
            
            ,
            
              5037
            
            ,
            
              "
            
            
              -s
            
            
              "
            
            ,
            
              "
            
            
              127.0.0.1:62001
            
            
              "
            
            ,
            
              "
            
            
              shell
            
            
              "
            
            ,
            
              "
            
            
              am
            
            
              "
            
            ,
            
              "
            
            
              start
            
            
              "
            
            ,
            
              "
            
            
              -W
            
            
              "
            
            ,
            
              "
            
            
              -n
            
            
              "
            
            ,
            
              "
            
            
              cn.com.open.mooc/.cn.com.open.mooc.aindex.splash.MCSplashActivity
            
            
              "
            
            ,
            
              "
            
            
              -S
            
            
              "
            
            ,
            
              "
            
            
              -a
            
            
              "
            
            ,
            
              "
            
            
              android.intent.action.MAIN
            
            
              "
            
            ,
            
              "
            
            
              -c
            
            
              "
            
            ,
            
              "
            
            
              android.intent.category.LAUNCHER
            
            
              "
            
            ,
            
              "
            
            
              -f
            
            
              "
            
            ,
            
              "
            
            
              0x10200000
            
            
              "
            
            
              ]

            
            
              10
            
            
              11
            
             [ADB] Error: Activity used to start app doesn
            
              '
            
            
              t exist or cannot be launched! Make sure it exists and is a launchable activity
            
            
              12
            
            
              13
            
                 at Object.wrappedLogger.errorAndThrow (lib/logger.js:
            
              60
            
            :
            
              13
            
            
              )

            
            
              14
            
            
              15
            
                 at ADB.callee$
            
              0
            
            $
            
              0
            
            $ (../../../lib/tools/apk-utils.js:
            
              68
            
            :
            
              13
            
            
              )

            
            
              16
            
            
              17
            
                 at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              67
            
            :
            
              40
            
            
              )

            
            
              18
            
            
              19
            
                 at GeneratorFunctionPrototype.invoke [
            
              as
            
             _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              315
            
            :
            
              22
            
            
              )

            
            
              20
            
            
              21
            
                 at GeneratorFunctionPrototype.prototype.(anonymous function) [
            
              as
            
             next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              100
            
            :
            
              21
            
            
              )

            
            
              22
            
            
              23
            
                 at GeneratorFunctionPrototype.invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              136
            
            :
            
              37
            
            
              )

            
            
              24
            
            
              25
            
              Error: Activity used to start app doesn
            
              '
            
            
              t exist or cannot be launched! Make sure it exists and is a launchable activity
            
            
              26
            
            
              27
            
                 at Object.wrappedLogger.errorAndThrow (lib/logger.js:
            
              60
            
            :
            
              13
            
            
              )

            
            
              28
            
            
              29
            
                 at ADB.callee$
            
              0
            
            $
            
              0
            
            $ (../../../lib/tools/apk-utils.js:
            
              68
            
            :
            
              13
            
            
              )

            
            
              30
            
            
              31
            
                 at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              67
            
            :
            
              40
            
            
              )

            
            
              32
            
            
              33
            
                 at GeneratorFunctionPrototype.invoke [
            
              as
            
             _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              315
            
            :
            
              22
            
            
              )

            
            
              34
            
            
              35
            
                 at GeneratorFunctionPrototype.prototype.(anonymous function) [
            
              as
            
             next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              100
            
            :
            
              21
            
            
              )

            
            
              36
            
            
              37
            
                 at GeneratorFunctionPrototype.invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              136
            
            :
            
              37
            
            
              )

            
            
              38
            
            
              39
            
             [ADB] Error: Error occured 
            
              while
            
             starting App. Original error: Activity used to start app doesn
            
              '
            
            
              t exist or cannot be launched! Make sure it exists and is a launchable activity
            
            
              40
            
            
              41
            
                 at Object.wrappedLogger.errorAndThrow (lib/logger.js:
            
              60
            
            :
            
              13
            
            
              )

            
            
              42
            
            
              43
            
                 at ADB.callee$
            
              0
            
            $
            
              0
            
            $ (../../../lib/tools/apk-utils.js:
            
              80
            
            :
            
              9
            
            
              )

            
            
              44
            
            
              45
            
                 at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              67
            
            :
            
              40
            
            
              )

            
            
              46
            
            
              47
            
                 at GeneratorFunctionPrototype.invoke [
            
              as
            
             _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              315
            
            :
            
              22
            
            
              )

            
            
              48
            
            
              49
            
                 at GeneratorFunctionPrototype.prototype.(anonymous function) [
            
              as
            
             next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              100
            
            :
            
              21
            
            
              )

            
            
              50
            
            
              51
            
                 at GeneratorFunctionPrototype.invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:
            
              136
            
            :
            
              37
            
            
              )

            
            
              52
            
            
              53
            
              Error: Error occured 
            
              while
            
             starting App. Original error: Activity used to start app doesn
            
              '
            
            
              t exist or cannot be launched! Make sure it exists and is a launchable activity
            
            
              54
            
            
              55
            
                 at Object.wrappedLogger.errorAndThrow (lib/logger.js:
            
              60
            
            :
            
              13
            
            )
          

  從第一眼看見這個日志我知道大家的第一反應已經暈了,沒事我們來仔細看。就日志的第一行說的大概意思就是“我們盡力去運行這個Activity了,但是他還是不存在?!蹦敲纯吹竭@里小伙伴應該思考一個問題,在前面配置頁面時就講過如果你配置package或者activity錯誤那么是無法啟動的?,F在已經告訴我們說這個Activity不存在了是否應該去仔細檢查一下呢?

  其實在整個日志中我們應該直接去看error的部分,[ADB] Error: Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity,這是error的日志,給出的提示也是這個activity不能夠被啟動,讓你再次確認后再去啟動。

從這個小小的實驗我們能夠看出日志本身并不難,難的是我們沒仔細看。所以以后遇見問題不要煩躁,應該仔細看日志,然后解決問題。

3、 appium的工作原理(奴家的看家本領)

  我們在去熟悉一套系統或者框架的時候,我們想去學好,我們是不是都要了解一下工作原理呢?只有我們知道了他是如何工作之后,在以后我們遇見棘手的問題時才能夠從根本去解決問題。但是在講這個之前需要講一個題外話,不知道有誰思考過appium是如何實現自動化的嗎?無論ios還是android在做自動化時考慮到安全等因素他們都是不允許直接去操作的,所以我們要做自動化那么就必須借助他們本身公布出來的一些工具,android是UIAutomator,ios使用的是UIAutomation,其實我們所謂的自動化就是我們使用的工具去調用他們公布出來的框架的方法,然后再去執行。下面我們來看一下appium的工作原理,首先來看一張圖片。

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第4張圖片

  通過上面的圖片我們可以知道appium是基于WebDriver協議的,他利用Bootstrap調用google公布的android的自動化測試框架UIautomator的命令來實現我們的app自動化,再能理解一點就是我們的電腦(client)上運行自動化測試腳本,調用的是webdriver的接口,appium server接收到我們client上發送過來的命令后他會將這些命令轉換為UIautomator認識的命令,然后由UIautomator來執行自動化。

  可能這里有些小伙伴會迷糊,說android是這樣那么ios也是這樣嗎?其實真的差不多,只是他們支持的工具不一樣,ios使用的是UIAutomation,首先client發送腳本請求,再到我們的appium服務,這里appium會調用instruments去啟動一個server,然后讓他去執行后面的操作來完成自動化。備注:UIAutomation是instruments下面的一個工具,所以不要驚慌。

4、Appium的優勢(奴家優點)

  現在市面上做自動化的框架無論是成熟還是一般的都有很多,我們不可能都去熟悉,但是我們需要了解一個常見的,不然你怎么知道好與壞呢?我相信在學習自動化時就想過為什么需要學appium,其實我在剛開始做移動自動化時選擇的是robotium,但是后來因為項目的需要發現我如果只是用robotium發現ios根本沒法做,那么我就需要去單獨做一個,這個會很麻煩,這個時候appium剛好出來了,剛接觸他我就決定使用了,因為在之前做web自動化時用的就是selenium,所以這個用起來會很方便。下面我們來列舉一下他的優點:

1、可以同時支持android、ios

2、支持多種語言,java、python、php、Ruby等等

3、不用為復雜的環境發愁

4、如果你有selenium經驗,直接上手

從上面來看他的優點還是很多的,當然缺點也有,這里不列舉了,免得破壞美好的印象。

當看到這里的時候你對奴家(appium)是否已經有一個更加清晰的影子了呢?接下來我們需要的就是去動手實戰吧。

5、小結

1、appium mac和windows下都有兩種安裝模式,一種是通過客戶端安裝,一個是終端安裝,這里說一下區別:

做自動化肯定不可能只是在一臺機器上做自動化,因為那樣的意義并不是很大,所以很多時候我們都是鏈接多臺電腦去執行,但是appium去鏈接多臺電腦時就需要啟動多個appium的服務,如果說你安裝是通過客戶端去安裝的,你鏈接多臺機器就需要啟動多次,配置多次,這樣對你電腦本身也是一個性能考驗。如果你是通過終端命令安裝的在啟動的時候你只需要通過命令啟動多個服務就好。這里為什么說這么多,就是因為曾經作者在做一個項目時統一體啊機器上appium客戶端啟動了5個,長期運行case后appium的服務會自動掛掉,但是通過終端安裝啟動超過10個服務,同時去運行依然沒有問題。這是我的經歷不一定全對,讀者可以根據自己愛好進行選擇。

appium客戶端安裝:

(1)去官方下載:http://appium.io/? 比較慢,相比之下慢,其實宏哥這邊還是嗖嗖的很快地

(2)國內下載:鏈接: https://pan.baidu.com/s/1SqGzEFzWfNjyQBE1lsiKOw 提取碼: 48af (賊快,推薦)

現在安裝包后直接傻瓜式的安裝,一切下一步,默認即可。(windows也是一樣)

appium終端安裝:

直接在終端輸入命令:npm install -g appium。(切記不要用sudo去執行) 在安裝過程中不報錯,你就安裝成功了,報錯也不要著急,可以百度解決,也可以聯系我。appium命令安裝默認的是在國外去請求,因為n多原因你失敗了,so建議使用如下命令 訪問國內的鏡像安裝npm --registry http://registry.cnpmjs.org install -g appium? 成功后輸入appium會提示: Welcome to Appium?說明安裝成功了。

宏哥不能保證所整理都符合大家的口味,但我能保證每一篇都是用心去寫和用心去整理,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的博客和個人公眾號的技術分享。在分享中進步,越努力越幸運,期待我們都有美好的明天!

支持宏哥的朋友們和宏哥的宏粉記得點波推薦哦,您的肯定就是我進步的動力。鄙人先在這里給您道謝了,謝您嘞~~ Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第5張圖片

個人公眾號(因為許多文章都被搬到別人的公眾號里了,還是原創,所以宏哥果斷也開一個公眾號。打算與博客園文章同步,希望大家隨時隨地學習與進步):

Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第6張圖片

微信群(因為有人給我發短消息說公司不讓用QQ,就幫忙建立一個微信群,歡迎加入討論和交流)

? Appium+python自動化(八)- 初識琵琶女Appium(千呼萬喚始出來,猶抱琵琶半遮面)- 下(超詳解)_第7張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 激情伊人网 | 国产成人v片视频在线观看 国产成人爱片免费观看视频 | 狠久久| 日日噜噜夜夜躁躁狠狠 | 中文字幕网在线 | 一级片亚洲| 国产一区福利 | 免费看人做人爱视频拍拍拍 | 日本一极毛片兔费看 | 91探花在线视频 | 91这里只有精品 | 国产精品久久久久久久免费大片 | 国产中文久久精品 | 久久久这里只有精品免费 | 亲热网站| 一本一本久久a久久综合精品蜜桃 | 欧美成人在线免费观看 | 97国内精品久久久久久久影视 | 亚洲视频在线一区二区 | 亚洲成a人 | 国产精品a在线观看香蕉 | 久久只精品 | 鲁丝一区二区三区不属 | 中文字幕亚洲一区二区va在线 | 日日夜人人澡人人澡人人看免 | 极品美女aⅴ高清在线观看 极品美女一级毛片 | 四虎影院在线 | 日韩一区二区三区不卡视频 | 男人影院在线 | 99在线视频网站 | 老司机亚洲精品影院在线 | 国产高清视频在线免费观看 | 久久国产精品老人性 | 亚洲爱爱视频 | 亚洲欧美一区二区三区在线 | 97色伦图片97色伦图影院久久 | 二级毛片全部 | 日本不卡在线视频 | 日日草天天干 | 欧美超级碰碰 | 快色视频网站 |