大前堤:
如果你需要airtest提供的可視化測試報告,那你的操作系統,一定要有圖形化界面.
否則運行你的airtest腳本 會遇到這樣的問題
Xlib.error.DisplayNameError: Bad display name ""
你可能百度之后 遇到了xhost +命令
執行這個命令后,再運行測試腳本,又遇到這個問題
然后再百度,原來.Xauthority Xlib模塊都是有操作系統圖形化界面的模塊
再看看為什么會報這個錯呢?
因為在airtest_selenium模塊下的proxy.py文件調用了這一句代碼
from pynput.mouse import Controller, Button
pynput又是干什么的,是和鼠標鍵盤相關的模塊
既然你的操作系統無圖形化界面,而使用airtest_selenium又需要圖形化界面,這就沖突了.
注釋掉airtest_selenium關於pynput的相關代碼會發現,程序可以跑了,但是生成的可視化報告就是這樣的
所以如果你不需要 可視化的測試 報告,通過 修改proxy.py文件,你的airtest腳本是可以在無圖形化的界面的linux系統跑的.如果你需要可視化報告,則可能需要在其它的有圖形界面的系統中運行airtest web測試腳本
step1
創建虛擬環境 airtestVenv
mkvirtualenv airtestVenv
列出所有虛擬環境
lsvirtualenv
在虛擬環境中安裝airtest pocoui
切換到airtestVenv虛擬環境
workon airtestVenv
pip3install airtest
pip3install pocoui
pip3 install selenium
pip3 install airtest_selenium
pip3 install pynput #有圖形化界面的操作系統安裝,無圖形化界面安裝也沒用,會報錯的
驗證安裝成功:
(airtestVenv) [root@67 wangju]# airtest usage: airtest [-h] {run,info,report} ... positional arguments: {run,info,report} run/info/report run run script info get & print author/title/desc info of script report generate report of script optional arguments: -h, --help show this help message and exit
step2:
安裝chrome
參考:
https://blog.csdn.net/diyiday/article/details/83824878
1.安裝瀏覽器
指定yum 源
[root@67 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安裝
[root@67 ~]# curl https://intoli.com/install-google-chrome.sh | bash
驗證安裝情況
[root@67 ~]# google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
解決問題
nano /usr/bin/google-chrome
修改如下,即可正常打開瀏覽器了
將 exec -a "$0" "$HERE/chrome" "$@" 改為 exec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox
再次使用命令打開chrome瀏覽器
[root@67 ~]# google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
正常打開網頁了
安裝完成后在/opt目錄下生成google安裝目錄
安裝chromedriver
查看當前chrome版本
需選擇與chrome對應的版本安裝,
[root@67 ~]# google-chrome --version
Google Chrome 75.0.3770.80
我的chrome版本75.0.3770.8
下載地址:https://npm.taobao.org/mirrors/chromedriver/
在頁面搜索75.0.3770.8
將下載在本地的webdriver傳送至服務器
scp -r ./chromedriver root@10.2.1.92:/home/wangju/gitProject/Airtest/demoAir.air
如果下載在服務器使用unzip 解壓
unzip chromedriver_linux64.zip
驗證安裝情況
./chromedriver
如圖所示,即安裝成功
建立軟連接:
才明白原來linux的軟鏈接就相當於windows的快捷方式呀
ln -s /opt/google/chromedriver /usr/bin/chromedriver
step3
使用測試腳本測試
偷懶沒有使用絕對路徑,使用的相對路徑,所以要自己切換路徑
當前文件夾是demoAir.air
別忘記切換到airtest的虛擬環境
先運行一個selenium腳本測試
報錯了
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
解決辦法:
先排除此錯誤是由於不兼容的ChromeDriver版本和正在使用的Chrome瀏覽器版本造成的,使用最新的Chrome瀏覽器版本68的Chrome Driver.exe(v2.41)
版本號是一致的
我明明在本地測試的時候是可以運行腳本的,但是為什么移到centOS就會出錯了呢,是哪里有區別呢?
已經確定chrome和chromeDriver版本是一致的了,唯一不一樣的是,我按照教程做了如下配置
nano /usr/bin/google-chrome

這是我的測試腳本
1 #coding=utf8 2 from selenium import webdriver 3 from selenium.webdriver.chrome.options import Options 4 chrome_options = Options() 5 chrome_options.add_argument('--headless') 6 chrome_options.add_argument('--disable-gpu') 7 driver = webdriver.Chrome(executable_path="./chromedriver", chrome_options=chrome_options) 8 #driver = webdriver.Chrome() 9 driver.get("https://www.baidu.com") 10 print(driver.page_source) 11 print(driver.current_url) 12 #driver.quit()
這篇教程是把禁止沙箱模式寫到了chrome的配置文件中
在代碼中並沒有體現下面這行代碼
我觀察了樓主的測試代碼
chrome_options.add_argument('--no-sandbox') # 禁止沙箱模式,否則肯能會報錯遇到chrome異常
所以猜測是不是配置chrome的配置文件后,所以樓主沒有在腳本中再做配置了呢?
是不是我改chrome的配置文件改出問題呢?因為我在本地的時候並沒有做這項配置,但在腳本中有 --no-sandbox腳本是可以跑通的
不管怎么說,這是我目前唯一想到有區別的地方了,先改回來試試
注釋了增加的代碼,而使用默認的配置
再次運行腳本就成功了
step4:修改proxy.py源文件
(指定chromedriver的位置,因為proxy.py默認是使用airtestIDE工具配置的chromedriver的位置的,如果脫離airtestIDE程序就會找不到chromedriver,所以需要自己手動配置)
增加這部分代碼 :
先使用find命令查找proxy.py的所在位置
sudo find / -name airtest_selenium
執行如下命令 運行測試腳本,並生成日志文件,注意當前文件夾是demoAir.air:
wangju@wangju-HP-348-G4:~/Airtest/demoAir.air$ airtest run demoAir.py --log log/
執行如下命令,利用上一步生成的日志文件 生成可視化的測試報告 log.html,注意當前文件夾是Airtest
wangju@wangju-HP-348-G4:~/Airtest$ airtest report demoAir.air --log_root demoAir.air/log/ --outfile demoAir.air/log/log.html --lang zh
demoAir.air/log/log.html
如果看到demoAir.air/log/log.html表示已經在log文件夾下生成測試報告了,將該文件復制到本地,使用瀏覽器打開,查看腳本運行結果
在/home/wangju/Airtest/demoAir.air/log文件夾中找到log.html文件,打開該文件查看測試結果