此文章來源於專案官方公眾號:“AirtestProject”\
版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途一、前言
在上期更新推文中提到,我們 Airtest-Selenium 更新到了 1.0.6 版本,新增支援 Selenium4.0 的語法,那麼我們來看一下 Airtest-Selenium 更新後有什麼新的內容吧~
二、selenium 4.0 有什麼新功能
selenium4.0 最主要的還是定位元素方法的更新,與舊版本的 selenium 程式碼寫法存在一些差異,變得更簡潔明瞭。
1. 定位單個元素方法的更新
首先我們來看一下定位元素方法的更新,AirtestIDE 同時相容新舊兩種寫法,將find_element_by_xpath()
的方式更新為find_element()
,目前使用 AirtestIDE 的 Selenium 視窗錄製指令碼輸出的仍然為舊寫法。但是我們是可以相容執行新寫法的~
更新前寫法(Selenium3):
driver.find_element_by_class_name("className")
driver.find_element_by_css_selector(".className")
driver.find_element_by_id("elementId")
driver.find_element_by_link_text("linkText")
driver.find_element_by_name("elementName")
driver.find_element_by_partial_link_text("partialText")
driver.find_element_by_tag_name("elementTagName")
driver.find_element_by_xpath("xpath")
更新後寫法(Selenium4):
#注意使用新寫法的時候要引用selenium的By庫
from selenium.webdriver.common.by import By
driver.find_element(By.CLASS_NAME,"xx")
driver.find_element(By.CSS_SELECTOR,"xx")
driver.find_element(By.ID,"xx")
driver.find_element(By.LINK_TEXT,"xx")
driver.find_element(By.NAME,"xx")
driver.find_element(By.PARTIAL_LINK_TEXT,"xx")
driver.find_element(By.TAG_NAME,"xx")
driver.find_element(By.XPATH,"xx")
2. 定位多個元素方法的更新
與上述定位元素一樣,定位多個元素方法的更新將find_elements_by_xpath
() 的方式換成了find_elements()
,下面是一些寫法的變化:
更新前寫法(Selenium3):
driver.find_elements_by_class_name("className")
driver.find_elements_by_css_selector(".className")
driver.find_elements_by_id("elementId")
driver.find_elements_by_link_text("linkText")
driver.find_elements_by_name("elementName")
driver.find_elements_by_partial_link_text("partialText")
driver.find_elements_by_tag_name("elementTagName")
driver.find_elements_by_xpath("xpath")
更新後寫法(Selenium4):
#注意使用新寫法的時候要引用selenium的By庫
from selenium.webdriver.common.by import By
driver.find_elements(By.CLASS_NAME,"xx")
driver.find_elements(By.CSS_SELECTOR,"xx")
driver.find_elements(By.ID,"xx")
driver.find_elements(By.LINK_TEXT,"xx")
driver.find_elements(By.NAME,"xx")
driver.find_elements(By.PARTIAL_LINK_TEXT,"xx")
driver.find_elements(By.TAG_NAME,"xx")
driver.find_elements(By.XPATH,"xx")
3. Selenium 4 新增了相對定位
selenium 更新到 4.0 以上的版本後,新增了一個對元素相對定位的支援,他能根據某些原點元素作為參考去定位該元素附近的其他元素,目前可用的相對定位有:
above 元素的上方
below 元素的下方
toLeftOf 元素的左方
toRightOf 元素的右方
-
near 元素的附近
#假如有九宮格button元素分別排布著1-9,如計算器排布方式 text5 = driver.find_element(By.NAME, "5") #以數字5為原點元素的基準 #在數字5的上面是數字8 text8 = driver.find_element(locate_with(By.TAG_NAME, "button").above(text5)) #在數字5的下面是數字2 text2 = driver.find_element(locate_with(By.TAG_NAME, "button").below(text5)) #在數字5的左面是數字4 text4 = driver.find_element(locate_with(By.TAG_NAME, "button").to_left_of(text5)) #在數字5的右面是數字6 text6 = driver.find_element(locate_with(By.TAG_NAME, "button").to_right_of(text5)) #預設尋找數字5附近含有該TAG_NAME且離數字5最近的元素 Near = driver.find_element(locate_with(By.TAG_NAME, "button").near(text5))
三、在 AirtestIDE 上跑 selenium4.0 的新方法
1. 以定位單個元素方法的更新為例
可以看到,我們這邊可以混合使用兩種寫法的,都可以正常識別並進行正常的操作的,具體參考程式碼如下:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.by import By
driver = WebChrome()
driver.implicitly_wait(20)
#開啟百度網站
driver.get("https://www.baidu.com")
sleep(2.0)
#在搜尋框中搜尋2024兩會
searchbox = driver.find_element(By.ID,"kw")
searchbox.send_keys("2024兩會")
searchbox.submit()
driver.switch_to_new_tab()
#點選進入其中一個直播回放畫面
driver.find_element(By.XPATH,"//*[@id="2"]/div/div/div/div[3]/div/div/div[4]/a/button/span").click()
driver.switch_to_new_tab()
sleep(3.0)
#識別影片的簡述內容
el=driver.find_element(By.CLASS_NAME,"title-desc").text
print(el)
2. 以元素相對定位方法的更新為例
注意: 如果使用 AirtestIDE 原生環境跑測的同學們可能會發現出現了這個報錯資訊:No module named 'selenium.webdriver.support.relative_locator'
,這個是 AirtestIDE 環境下的相容性問題,目前我們已經在排期相容了,後續有新的相容資訊會通知大家!
雖然 AirtestIDE 的原生環境會有一定相容性的報錯,但是可以透過更換 python 路徑為本地的 python 環境就可以使用新的相對定位的方法啦~(PS:前提是本地的 python 環境下的 selenium 以及 Airtest-Selenium 的版本皆為目前最新版本)
具體更換 AirtestIDE 的環境為本地 python 環境的詳細方法,可以點選檢視我們的教程文件:https://airtest.doc.io.netease.com/IDEdocs/3.4run_script/0_run_script/#4
下面我們利用一個小小的例子,來看一下相對定位的實現情況吧。
可以看到可以透過一個已知的原點元素以及目標元素的所在方位可以透過相對定位去直接尋找,在日常編寫指令碼的時候可以更方便快捷。
參考程式碼如下:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
driver = WebChrome()
driver.implicitly_wait(20)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
#開啟計算機網站
driver.get("http://www.0756jia.com/")
sleep(2.0)
#以數字5為相對定位的原點
text5 = driver.find_element(By.ID,"simple5")
#在數字5上方是數字8
text8 = driver.find_element(locate_with(By.TAG_NAME, "A").above(text5))
text8.click()
#在數字5下方是數字2
text2 = driver.find_element(locate_with(By.TAG_NAME, "A").below(text5))
text2.click()
#在數字5左方是數字4
text4 = driver.find_element(locate_with(By.TAG_NAME, "A").to_left_of(text5))
text4.click()
#在數字5右方是數字6
text6 = driver.find_element(locate_with(By.TAG_NAME, "A").to_right_of(text5))
text6.click()
#在數字5旁邊是數字8
Near = driver.find_element(locate_with(By.TAG_NAME, "A").near(text5))
Near.click()
3.小結與注意事項
3.1 AirtestIDE 更新了 Airtest-Selenium,支援了 Selenium 4.0 的新定位語法
AirtestIDE 更新了 Airtest-Selenium 到 1.0.6 版本,支援了 Selenium4.0 的新定位語法,包括了單個以及多個元素的定位語法,將find_element_by_xpath
() 的方式換成了find_element()
。
3.2 在本地 python 環境中,更新 airtest-selenium、selenium,可以支援 4.0 新功能
雖然在 AirtestIDE 的原生環境中,暫時不支援進行該相對定位方式,但是可以在本地的 python 環境中,將 Airtest-Selenium、Selenium4 到更新到最新版本後,可使用新增的元素的相對定位方法。
在更新 Airtest-Selenium 的時候,別忘了將自己環境下的 selenium 更到 4.0 以上的版本
#更新airtest-selenium
pip install -U airtest-selenium
#更新selenium
pip install -U selenium
3.3 chrome 與 chromedriver 對應問題
大家想用新版本的 chrome 瀏覽器進行自動化測試很久了,我們相容了目前新版本的 chrome 瀏覽器,但是要注意的是要將 AirtestIDE 環境下以及本地環境下的 chromedriver 更換成與自己 chrome 版本對應的才可以噢!
舊版 chromedriver 下載地址:https://chromedriver.storage.googleapis.com/index.html
新版 chromedriver 下載地址:https://googlechromelabs.github.io/chrome-for-testing/
3.4 小結
目前 Airtest-Selenium 的 1.0.6 版本相容了 selenium4.0 的語法,我們可以更簡單快捷的完成我們想要的自動化測試效果,可以更好的聯動瀏覽器去完成更多的內容。同時我們也歡迎大家給我們投稿你們想要實現的 selenium 實操例子,也非常歡迎熱心同學給我們投稿自己實現的指令碼例子~
如同學們在使用新版的 Airtest-Selenium 時遇到了一些問題無法解決,可以透過此網站向我們的開發者快速提單:https://airtest.netease.com/issue_create 。
可以在標題中加入 “Airtest-Selenium1.0.6” 之類的字眼。方便我們快速篩選和排查。
AirtestIDE 下載:airtest.netease.com/\
Airtest 教程官網:airtest.doc.io.netease.com/\
搭建企業私有云服務:airlab.163.com/b2b
官方答疑 Q 群:526033840