Appium自動化測試遇到的chromedriver/chrome坑


 

前言

    app的webview自動化是依賴於chromedriver的,並且每個app的webview版本號都不太一樣,這就導致了每次都需要重新去下載對應的chromedriver版本。如何根據當前的webdriver版本去匹配對應chromedriver版本,這是一個難題。

    根據官方文檔翻譯過來看,版本不匹配的話一般會報錯:

An unknown server-side error occurred while processing the command.

Original error: unknown error: Chrome version must be >= 55.0.2883.0

Chrome driver啟動

用chrome瀏覽器運行自動化測試用例時,如果報這樣的錯誤selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing value

可以這樣來解決:指定chromedriver.exe驅動絕對路徑

  driver = webdriver.Chrome(r'e:\xxx\chromedriver.exe')

常遇錯誤

    我們在使用native和h5混合的應用程序測試時,可能會遇到報錯

E:\ProgramFiles(x86)\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py:1031:

UserWarning: name used for saved screenshot does not match file type. It should end with a `.png` extension。

"type. It should end with a `.png` extension", UserWarning)

..['NATIVE_APP', 'WEBVIEW_chrome', 'WEBVIEW_com.android.browser']

NATIVE_APP

Doctor my center Test Over.

E

=====================================================

ERROR: test_e_AboutContact (__main__.center)

----------------------------------------------------------------------

Traceback (most recent call last):

File "E:/ATS/TCyDoctorNew/test_case/test_dir/test_4doctormycenter.py", line 371, in test_e_AboutChengyiContact driver.switch_to.context('WEBVIEW_com.android.browser')

File"E:\ProgramFiles(x86)\Python\Python37\lib\site-packages\appium\webdriver\switch_to.py", line 31, in context

self._driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {'name': context_name})

File"E:\ProgramFiles(x86)\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute

self.error_handler.check_response(response)

File"E:\ProgramFiles(x86)\Python\Python37\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response raise wde

File"E:\ProgramFiles(x86)\Python\Python37\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response

super(MobileErrorHandler, self).check_response(response)

File "E:\Program Files (x86)\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response

raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: No Chromedriver found that can automate Chrome '55.0.2883'. See https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md for more details.

----------------------------------------------------------------------

Ran 3 tests in 66.001s

FAILED (errors=1)

Process finished with exit code 0

    我們來看報錯信息,第一個是warning,是指截圖的格式最好是png,這個與本文無關我們先忽略,關鍵看第二個錯誤,它主要緣於“No Chromedriver found that can automate Chrome '55.0.2883”,

在appium日志里也能看到詳情

 

了解chromedriver

    通過管理Chromedriver, Appium支持安卓網頁和支持谷歌的混合app的自動化。通過npm package安裝的總是綁定最新的chromedriver。

    但是,每一版chromedriver的更新會支持最小的新增谷歌的版本,所以早期的版本不能再跟綁定的版本兼容。這時在appium server日志里會有類似的錯誤:

An unknown server-side error occurred while processing the command.

Original error: unknown error: Chrome version must be >= 55.0.2883.0

    為解決這個問題,appium可以通過加上—chromedriver_version屬性配置使用特定的chromedriver版本,比如

npm install appium –chromedriver_version="2.16"

或者在CHROMEDRIVER_VERSION環境變量指定版本,如

CHROMEDRIVER_VERSION=2.20 npm install appium

這也能得到最新的版本。最后,還可以被指定在運行時,通過—chromedriver-executable 服務器標識與chromedriver執行路徑手動下載,比如

appium --chromedriver-executable /path/to/my/chromedriver

chromedriver/chrome兼容

下面是chromedriver與最小的chrome版本對應表:

版本

最小谷歌版本

Chromedriver鏈接

2.44

69.0.3497.0

v2.44

2.43

69.0.3497.0

v2.43

2.42

68.0.3440.0

v2.42

2.41

67.0.3360.0

v2.41

2.40

66.0.3359.0

v2.40

2.39

66.0.3359.0

v2.39

2.38

65.0.3325.0

v2.38

2.37

64.0.3282.0

v2.37

2.36

63.0.3239.0

v2.36

2.35

62.0.3202.0

v2.35

2.34

61.0.3163.0

v2.34

2.33

60.0.3112.0

v2.33

2.32

59.0.3071.0

v2.32

2.31

58.0.3029.0

v2.31

2.30

58.0.3029.0

v2.30

2.29

57.0.2987.0

v2.29

2.28

55.0.2883.0

v2.28

2.27

54.0.2840.0

v2.27

2.26

53.0.2785.0

v2.26

2.25

53.0.2785.0

v2.25

2.24

52.0.2743.0

v2.24

2.23

51.0.2704.0

v2.23

2.22

49.0.2623.0

v2.22

2.21

46.0.2490.0

v2.21

2.20

43.0.2357.0

v2.20

2.19

43.0.2357.0

v2.19

2.18

43.0.2357.0

v2.18

2.17

42.0.2311.0

v2.17

2.16

42.0.2311.0

v2.16

2.15

40.0.2214.0

v2.15

2.14

39.0.2171.0

v2.14

2.13

38.0.2125.0

v2.13

2.12

36.0.1985.0

v2.12

2.11

36.0.1985.0

v2.11

2.10

33.0.1751.0

v2.10

2.9

31.0.1650.59

v2.9

2.8

30.0.1573.2

v2.8

2.7

30.0.1573.2

v2.7

2.6

29.0.1545.0

v2.6

2.5

29.0.1545.0

v2.5

2.4

29.0.1545.0

v2.4

2.3

28.0.1500.0

v2.3

2.2

27.0.1453.0

v2.2

2.1

27.0.1453.0

v2.1

2.0

27.0.1453.0

v2.0

自動查找匹配的chromedriver

從Appium1.8.0開始,appium可以得到這個正確的基於chrome的chromedriver版本。當appium發布時,appium與chromedriver綁定,更多chromedriver版本可供下載到appium的安裝文件里(不建議這樣做,因為更新appium時將會刪除它們)。

當一個appium版本發布,最新的chromedriver版本可以被獲取,可以通過chromedriver與最小chrome版本映射關系,得到映射的絕對路徑文件。這個文件內容必須做成json對象,例如

{

  "2.42": "63.0.3239",

  "2.41": "62.0.3202"

}

安裝網絡問題

    當appium安裝時需要下載chromedriver,所以會遇到安裝失敗的網絡問題。

默認下chromedriver從https://chromedriver.storage.googleapis.com/ 獲取。使用chromedrivre的npm鏡像配置chromedriver_cdnurl。

npm install appium-chromedriver --chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver

或者在你的.npmrc文件增加屬性

chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver

另一種選擇是使用Path環境變量CHROMEDRIVER_CDNURL

CHROMEDRIVER_CDNURL=http://npm.taobao.org/mirrors/chromedriver npm install appium-chromedriver

在國內,可以用cnpm~

首先,安裝cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

 

輸入cnpm -v,顯示cnpm不是內部或外部命令,也不是可運行命令或批處理文件。

cnpm默認會安裝在C:\Users\admin\AppData\Roaming\npm個人用戶路徑下。所以追溯到這個文件夾,在這里可以執行cnpm –v,因此推測沒有把cnpm路徑加入到path系統環境變量中。

添加到path后,再關閉打開cmd,執行cnpm –v命令,

 

解決這個之后執行安裝chromedriver

cnpm install -g appium --chromedriver_version="2.28" --chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM