在web頁面上經常會遇到一些彈出框,彈出框也分很多種,有的點擊確定和取消,有的可以輸入一些內容。
彈出框
彈出框有三種,分別是:alert,confirm,prompt
彈出框的主要操作方法:
ext:獲取文本值
accept() :點擊"確認"
dismiss() :點擊"取消"或者關閉彈出框
send_keys() :輸入文本值
alert
alert是HTML DOM 中用到的一種腳本語言,它的中文意思是“提醒”。它是JavaScript或VBscript腳本語言中窗口window對象的一個常用方法;其主要用法就是在你自己定義了一定的函數以后,通過執行相應的操作,所彈出對話框的語言。並且alert對話框通常用於一些對用戶的提示信息。常見的為alert函數。.
confirm
confirm是JavaScript 語言中HTML DOM的一個方法。主要用法是:顯示一個帶有指定消息與“確定”及“取消”按鈕的對話方塊。
prompt
prompt是javascript語言中的一個方法,主要用處是顯示提示對話框。
alert
安靜自己寫了一個alert的彈框,復制下面代碼,存放在記事本中,后綴名改成html就行了
<html> <head> <script type="text/javascript"> function display_alert() { alert("請關注 測試-安靜!") } </script> </head> <body> <center> <input id="anjing" type="button" onclick="display_alert()" value="點擊我,有驚喜!" /> </center> </body> </html>
操作彈出框可以通過selenium進行切換到彈出框上,然后在進行一系列的操作。切換到彈出框: switch_to.alert
話不多說,上代碼
from selenium import webdriver driver = webdriver.Chrome() path = r'd:\web\alert.html' driver.get(path) driver.find_element_by_id('anjing').click() # 切換到alert a = driver.switch_to.alert # 打印彈出框文本內容 print(a.text) # 點擊確定 a.accept()
confirm
安靜同樣寫了一個confirm的文件。也是通過上面的方法進行操作
html:
<html> <head> <script type="text/javascript"> function show_confirm() { var r=confirm("請問:您是否關注了安靜的博客?"); if (r==true) { alert("感謝老鐵支持!"); } else { alert("請關注 測試-安靜!"); } } </script> </head> <body> <center> <input id="anjing" type="button" onclick="show_confirm()" value="點我,點我有驚喜!" /> </center> </body> </html>
通過selenium運用 switch_to.alert 進行切換到彈出框中,然后在點擊取消,再次點擊確定
from selenium import webdriver driver = webdriver.Chrome() path = r'd:\web\confirm.html' driver.get(path) driver.find_element_by_id('anjing').click() # 切換到alert a = driver.switch_to.alert # 打印彈出框文本內容 print(a.text) # 點擊取消 a.dismiss() print(a.text) # 點擊確定 a.accept()
prompt
同樣是上述方法,這次的彈出框存在輸入框,可以通過send_keys方法進行輸入內容
html:
<html> <head> <script type="text/javascript"> function disp_prompt() { var name=prompt("請問:您關注安靜的博客了嗎?","關注了") if (name!=null && name!="") { document.write("感謝老鐵支持!") } } </script> </head> <body> <input type="button" onclick="disp_prompt()" value="點我,點我有驚喜" /> </body> </html>
這里我們也可以通過send_keys()輸入內容(這里安靜不知道為啥無法輸入內容,大家可以試試。)
注:2021/12/21 沒有找到解決辦法。
from selenium import webdriver import time driver = webdriver.Chrome() path = r'E:\web\prompt.html' driver.get(path) driver.find_element_by_id('anjing').click() # 切換到alert a = driver.switch_to_alert() # 打印彈出框文本內容 print(a.text) time.sleep(4) # 點擊取消 a.send_keys('測試-安靜!') time.sleep(1) # 點擊確定 a.accept()
其他方法
我們可以通過其他方法進行跳轉到alert,這里需要用到Alert模塊,遇到模塊,首先進行導入 from selenium.webdriver.common.alert import Alert
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.alert import Alert driver = webdriver.Chrome() path = r'E:\web\prompt.html' driver.get(path) driver.find_element_by_id('anjing').click() # 切換到alert WebDriverWait(driver, 5).until(EC.alert_is_present()) # 等待彈出窗口出現 # alert = driver.switch_to.alert # 跳轉倒alert alert = Alert(driver) print(alert.text) alert.accept()
判斷彈出框
執行代碼過程中,可能會因為其他因素,網速慢等情況導致彈出框沒有出現,我們可以通過判斷元素中判斷彈出框時否出現來進行操作
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() path = r'E:\web\prompt.html' driver.get(path) driver.find_element_by_id('anjing').click() # 切換到alert WebDriverWait(driver, 5).until(EC.alert_is_present()) # 等待彈出窗口出現 alert = driver.switch_to.alert print(alert.text) alert.accept()
簡單的介紹了關於彈出框的三種方式。大家可以操作之前可以先看看到底是哪一種,然后使用對應的方法進行完成自動化測試。