【筆記】Selenium 實作:顯性等待跟頁面測試

更新於 發佈於 閱讀時間約 10 分鐘
上一篇我們花了許多篇幅在說明顯性等待,此篇會提到實際上的應用,一樣是以readmoo這個電子書城的網站為例,因為習慣從這個地方看書,打開來看時就會拿來玩一下,另外,此篇會假設是實際測試產品,增加些檢查頁面元素。

之前在運行自動化登入時,拿readmoo這個網站當例子,其實如果等待一些時間時,網站會出現這個畫面:

raw-image

這次我們試著等待此網頁出來,將它關掉並點擊登入,先抓元素,與此不同的是,我們假設這個網頁會是重複使用的,為方便管理,會將一些可調整的位置「變數化」,首先我們先把需要用到的套件導入:

#selenium套件​
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

#顯性等待​
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
#上一篇提到的例外錯誤,在設定的等待時間內仍找不到元素,有可能未加載完全或是其他原因導致。
from selenium.common.exceptions import TimeoutException

#既然是一個測試,那得需要時間,來記錄測試的時間​
from datetime import datetime


接著,設定變數,變數可以放在程式碼比較好看見的地方,想調整東西就不用找來找去的:

#需要設定的變數有三個,分別是google搜尋欄位要輸入的部分、帳號、密碼
#帳號密碼是自定義的
google_keyword = "readmoo"
​account = "******"
password = "******"


設定driver:

#一樣先關閉通知
chrome_options = Options()
chrome_options.add_argument("--disable-notifications")

#把瀏覽器設定套用到我們的driver
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com/")
#設定顯性等待,把WebDriverWait放到driver,並設定等待時間跟檢查頻率
#由於我們要找的頁面需要等比較長的時間,所以設定為30秒
driver_wait = WebDriverWait(driver,timeout= 30, poll_frequency=0.5)


另外先設定時間,時間最先印,這樣我們在終端機上看到的時間才會是最上面:

#獲取當下時間
current_time = datetime.now()
#格式化當下時間並印出
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
#字串前面的f是用來將formatted_time這個變數字串化,\n換行,因為不想讓字擠在一起
print(f"\n請求時間:{formatted_time}\n")


接著我們會用到 try-except 的結構,它是用來處理可能引發錯誤的程式碼,這裡我們拿來處理可能性的情境,並將不同情境都印出來,元素都一樣,之前的頁面東西,就不一個一個講了:

#​google搜尋,如果把相對應的訊息印出來
try:
search_box = driver_wait.until(EC.presence_of_element_located((By.NAME,"q")))
#google_keyword變數化,它將拿我們上面設定好的變數
search_box.send_keys(f"{google_keyword}")
search_box.send_keys(Keys.ENTER)
print("Google搜尋欄位點擊:成功")

#如果元素找超過顯性等待設定的時間,印出相對應的訊息​
except TimeoutException:
print("Google搜尋欄位點擊:處理超時")

#找失敗印相對應的訊息​
except:
print("Google搜尋欄位:點擊失敗")

#搜尋結果陣列​
search_results = driver_wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.g")))

#if-else夾著try-except if有結果執行try-except的內容,沒有搜尋結果的話印else​
if search_results:
first_results = search_results[0]
try:
link = driver_wait.until(EC.presence_of_element_located((By.TAG_NAME,"h3")))
link.click()
print("Googlo搜尋結果點擊:成功")

except TimeoutException:
print("Googlo搜尋結果:處理超時")

except:
print("Googlo搜尋結果點擊:失敗")
else:
print("沒有搜尋結果")


#彈窗關閉​
try:
link = driver_wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".aiq-r_LBtE.qg-inweb-close")))
link.click()
print("首頁彈窗關閉:成功")

except TimeoutException:
print("首頁彈窗關閉:處理超時")

except:
print("首頁彈窗關閉:失敗")


#點擊登入按鈕
try:
login_button = driver_wait.until(EC.presence_of_element_located((By.LINK_TEXT,"登入")))
login_button.click()
print("點擊登入按鈕:成功")

except TimeoutException:
print("點擊登入按鈕:處理超時")

except:
print("點擊登入按鈕:失敗")


#帳號輸入,帳號變數字串化
try:
search_box = driver_wait.until(EC.presence_of_element_located((By.NAME,"email")))
search_box.send_keys(f"{account}")
print("帳號輸入:成功")

except TimeoutException:
print("帳號輸入:超時")

except:
print("帳號輸入:失敗")

#密碼輸入,密碼變數字串化
try:
search_box = driver_wait.until(EC.presence_of_element_located((By.NAME,"password")))
search_box.send_keys(f"{password}")
print("密碼輸入:成功")

except TimeoutException:
print("密碼輸入:超時")

except:
print("密碼輸入:失敗")


#用ENTER點擊按鈕
try:
search_box.send_keys(Keys.ENTER)
print("登入頁點擊登入按鈕:成功")

except:
print("登入頁點擊登入按鈕:失敗")


#登入成功後,預設會回到首頁,所以我們在首頁抓一個關鍵字,來判斷我們是不是回到首頁了
try:
search_box = driver_wait.until(EC.presence_of_element_located((By.LINK_TEXT,"版權到期")))
print("登入:成功")

except TimeoutException:
print("登入:超時")

except:
print("登入:失敗")


#測試結束,關閉瀏覽器並釋放資源
driver.quit()


執行後,我們可以在終端機或是VS code上看到這樣的結果:

raw-image




avatar-img
21會員
18內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Selenium 是一個範圍廣泛的工具和函式庫的總稱專案,用於啟用和支援網頁瀏覽器的自動化。Selenium WebDriver 提供了 C#、JavaScript、Java、Python、Ruby 等多種語言的 API,可以用於編寫自動化測試軟體。 在定位元素時,WebDriver 提供對這 8
Thumbnail
等待著 等待著什麼 等待著車子在保養 等待著等會兒要去學校上課 等待著下午還要上班 等待著晚上還要上課 等待著回家和孩子玩抱抱 等待著整理一天的情緒 等待著反省 等待著睡眠 等待著夜裏睡眠的夢 等待著明晨的晨泳 等待著生命的日漸耗損 等待著生命無悔的等待 等待著等待  
Thumbnail
[等待] 有些事 就是要用一天 一天等待 有些地方 就是要一步 一步走 才會抵達 有些重要的東西 就是要一點一滴流逝 才能發覺它的重要
Thumbnail
很明顯是這「等待」帶來了細胞轉變。正是這「等待」使我成為了「存在」。正是這「等待」停止了舊的行為模式。
中文網站介面 測試:安著手機、蘋果電腦。 瀏覽器:皆是Google瀏覽器。 結果:過多人使用時即使登入系統也無法查看訂單和購物車,但過一陣子會自動更新變回正常。
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
下載: https://chromedriver.com/download#stable 選擇對應版本下載 如果不能執行就檢查一下權限,賦予執行的權力 例如: chmod +x /usr/local/bin/chromedriver (位置請自行變更)
Thumbnail
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
Thumbnail
作者比較了四種閱讀呈現模式,包括眼動追蹤和三種自訂步調閱讀。自訂步調閱讀模式中的移動視窗方法能有效量測出與眼動追蹤類似的效果。這種方法不僅金錢成本更低,而且有助於提供清晰且相對簡單的數據。但是,移動視窗方法也存在一些限制,例如增加的閱讀時間和可能導致受試者對內容理解的困難。
Thumbnail
本文整理 Readmoo 平台各種優惠,包含理財學伴專屬 Readmoo 優惠碼、新戶優惠、紅利點數等等。內文定期更新 250 折 50 優惠碼。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Selenium 是一個範圍廣泛的工具和函式庫的總稱專案,用於啟用和支援網頁瀏覽器的自動化。Selenium WebDriver 提供了 C#、JavaScript、Java、Python、Ruby 等多種語言的 API,可以用於編寫自動化測試軟體。 在定位元素時,WebDriver 提供對這 8
Thumbnail
等待著 等待著什麼 等待著車子在保養 等待著等會兒要去學校上課 等待著下午還要上班 等待著晚上還要上課 等待著回家和孩子玩抱抱 等待著整理一天的情緒 等待著反省 等待著睡眠 等待著夜裏睡眠的夢 等待著明晨的晨泳 等待著生命的日漸耗損 等待著生命無悔的等待 等待著等待  
Thumbnail
[等待] 有些事 就是要用一天 一天等待 有些地方 就是要一步 一步走 才會抵達 有些重要的東西 就是要一點一滴流逝 才能發覺它的重要
Thumbnail
很明顯是這「等待」帶來了細胞轉變。正是這「等待」使我成為了「存在」。正是這「等待」停止了舊的行為模式。
中文網站介面 測試:安著手機、蘋果電腦。 瀏覽器:皆是Google瀏覽器。 結果:過多人使用時即使登入系統也無法查看訂單和購物車,但過一陣子會自動更新變回正常。
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
下載: https://chromedriver.com/download#stable 選擇對應版本下載 如果不能執行就檢查一下權限,賦予執行的權力 例如: chmod +x /usr/local/bin/chromedriver (位置請自行變更)
Thumbnail
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
Thumbnail
作者比較了四種閱讀呈現模式,包括眼動追蹤和三種自訂步調閱讀。自訂步調閱讀模式中的移動視窗方法能有效量測出與眼動追蹤類似的效果。這種方法不僅金錢成本更低,而且有助於提供清晰且相對簡單的數據。但是,移動視窗方法也存在一些限制,例如增加的閱讀時間和可能導致受試者對內容理解的困難。
Thumbnail
本文整理 Readmoo 平台各種優惠,包含理財學伴專屬 Readmoo 優惠碼、新戶優惠、紅利點數等等。內文定期更新 250 折 50 優惠碼。