有種感覺
有種感覺,是否應該盡快結束這個selenium的情感劇。因為自從開始寫這個系列的文章,閱讀量就好少好少。雖說是學習總結,但碼字比學習更費時間,寫完了還沒人看,心塞。
今日要聞
今天和大家說說alert與iframe框架早selenium定位中,存在的問題吧。
很多網站,一些功能還在使用簡陋的alert進行彈窗確認操作。但是selenium如何可以定位到js彈窗的內容呢?之前說到的那些id class 等等方法肯定是不行的。所以selenium針對這個問題,編寫了單獨的方法。
driver.switch_to.alert()
,源碼可以看到alert = Alert(self._driver)
Alert可用方法.png
方法 | 說明 |
---|---|
text | 獲取alert文本內容 |
dismiss | 點擊“取消”或“cancel” |
accept | 點擊“確認”或“OK” |
send_keys | 發送文本 |
我們先來寫一個義診活動說明頁面來看看alert的使用吧:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>alert與iframe</title>
<link rel="stylesheet">
<style type="text/css">
.container {
max-width: 650px;
border: 2px solid grey;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="container">
<h2 class="text-center ">老中醫親情大回饋,義診活動開始啦!</h2>
<div>
<p class="strong text-warning">歡迎各位父老鄉親前來就診!請點擊同意隱私獲取授權:
<a id='access' href="javascript:alert('我同意該條款.')">點我確認</a></p>
</div>
</div>
</body>
</html>
下來看看alert的消息彈窗與獲取窗口的實現吧:
alert窗口定位.gif
代碼片段如下,so easy:
......
driver.find_element_by_id('access').click()
# 定位alert串口
alert = driver.switch_to.alert
time.sleep(1)
# 打印alert的文本信息
print(alert.text)
# 點擊alert確認按鈕
alert.accept()
......
iframe窗體定位
昨天寫了一個老中醫的問診單,如果我們把它通過iframe添加到這個義診活動的統一數內部,那么還可以使用簡單的find_element去定位嗎,但是否定的.....why?iframe是一個內聯框架,你可以理解為瀏覽器的選項卡1中嵌套了選項卡2,你可以從選項卡1直接定位選項卡2中的內容么?必然不行....那么該如何?其實這個很簡單。使用:driver.switch_to.frame()
來樣子看看frame的源碼:
frame源碼.png
我們可以先定位到這個iframe,然后吧這個定位節點傳給frame方法,就可以進入到iframe中進行操作了。
<iframe name="card" src="laozhongyi.html" width="600" ,
height="600" frameborder="0"></iframe>
總體代碼如下:
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清風Python
# @Date : 2019/6/23 20:17
# @Software : PyCharm
# @version :Python 3.7.3
# @File : Day5.1_alert&iframe.py
from selenium import webdriver
import time
URL = 'file:///D:/Codes_Repository/Python/SeleniumTest/Day5_alert與iframe定位/index.html'
options = webdriver.ChromeOptions()
options.add_argument('window-size=700,800')
options.add_argument('disable-infobars')
driver = webdriver.Chrome(options=options)
driver.get(URL)
time.sleep(1)
driver.find_element_by_id('access').click()
alert = driver.switch_to.alert
time.sleep(1)
print(alert.text)
alert.accept()
# 由于給定了ifram的name,我們直接可以通過它的name進行定位
driver.switch_to.frame("card")
driver.find_element_by_id('name').send_keys("隔壁老王")
time.sleep(1)
driver.close()
實現效果:
alert與iframe窗口定位.gif
To Be Continue
今天的內容就到這里,如果覺得有幫助,歡迎將文章或我的微信公眾號【清風Python】
分享給更多喜歡python的人,謝謝。