Selenium之定位彈窗元素


發現瀏覽器中有一些彈窗元素,無法定位。經過自己的摸索,總結一些心得,供日后回顧:
首先要確定彈窗的類型:
(1)div彈窗
(2)新標簽頁彈窗
(3)alert彈窗
(4)confirm彈窗
(4)prompt彈窗

DIV彈窗

 

 

 

 像這種DIV彈框,div彈窗是瀏覽器中比較好定位的彈窗,定位的方法與普通的元素一樣。不過這里會有一個坑,明明可以找到這個按鈕,但是就是定位不到,原因如下:
(1)有些DIV彈框裝載了很多元素,用的是慢加載方式,彈框中按各元素才會顯示,因為需要設置等待時間,等元素加載出來后,才能定位到

(2)DIV彈框失去了聚焦點,導致無法識別元素,可借助actionChains, 移動鼠標至DIV彈框元素上,進行聚焦,借助EC.visibility_of_all_elements_located,判斷元素可見后,再進行操作

action_chains = ActionChains(driver)
action_chains.move_to_element(driver.find_element(By.XPATH,"//div[@class='el-dialog__body']")).click().perform()
elementDialog = (By.XPATH,"//div[@class='el-dialog__body']")
wait_element(driver,elementDialog)
wait_element(driver,(By.CSS_SELECTOR,"div.el-form-item.is-success.is-required>div>div>input"))
driver.find_element_by_css_selector("div.el-form-item.is-success.is-required>div>div>input").click()
driver.find_element_by_css_selector("div.el-form-item.is-success.is-required>div>div>input").clear()
def wait_element(driver, *locator,):
 """等待元素在指定的時間內出現"""
wait=WebDriverWait(driver, 30, 1,(StaleElementReferenceException,))
try:
ele=wait.until(EC.visibility_of_all_elements_located(*locator))
return ele
except TimeoutException:
print("timeout exception,Can't find element by method : %s",*locator)
return False

(3)某些DIV彈框設置了style="display: none;" ,則這個框不可見,導致元素無法定位到

 

 解決辦法:

js = "document.getElementsByClassName('el-dialog__wrapper')[0].style";
//執行js后得到的結果是List,所以將結果轉換為List
driver.executeScript(js);
//如果list.size()==1,就點擊彈框的按鈕(根據實際情況寫)

或者直接將display改為block
js = "document.getElementsByClassName('el-dialog__wrapper')[0].style.display="block";
這樣能解決元素隱藏,定位不到的問題


新標簽頁彈窗

新標簽頁彈窗,則需要進行窗口的切換。此處第一個窗口打開百度首頁,在打開一個新窗口打開京東首頁,在兩個窗口之間進行切換。切換到不同的窗口之后,就可以用常規的方法進行元素的定位

handles = driver.window_handles # 獲取當前打開的所有窗口的句柄
driver.switch_to.window(handles[N]) # 切換到其中一個窗口
其中,獲取的句柄下標從0開始,即第一個窗口為[0]、第二個窗口為[1],如此類推。使用switch_to.window方法切換到新標簽頁后就可以做其他操作了。 

alert彈窗 

alert、confirm、prompt彈出框的主要操作方法:

ext:獲取文本值

accept() :點擊"確認"

dismiss() :點擊"取消"或者關閉彈出框

send_keys() :輸入文本值


self.browser.find_element_by_id("alert").click()
alert=self.browser.switch_to_alert()
print(alert.text)
#點擊確定按鈕
alert.accept()

confirm彈窗

 

 

self.browser.find_element_by_id("confirm").click()
confirm = self.browser.switch_to_alert()
print(confirm.text)
#點擊確定按鈕
confirm.accept()
#點擊取消按鈕
confirm.dismiss()

 

 

prompt彈窗 

 

self.browser.find_element_by_id("prompt").click()
prompt = self.browser.switch_to_alert()
print(prompt.text)
prompt.accept()

 

 

 

 


免責聲明!

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



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