頁面操作方法
1. 多frame(框架)切換
在Web應用中經(jīng)常會遇到frame/iframe嵌套頁面的應用翔冀,WebDriver只能在一個頁面上對元素識別與定位,對于frame/iframe內(nèi)嵌頁面上的元素無法直接定位,這時就通過switch_to.frame()
方法將當前定位的主體切換為frame/iframe的內(nèi)嵌頁面中贿肩。
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('test_frame.html')
# 切換到frame(id="if")的框架
driver.switch_to.frame("if")
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")
# 如果沒有id和name的情況
fr = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(fr)
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")
switch_to.frame()可以直接取frame的id或name涉瘾,如果沒有id和name可以先通過xpath定位到iframe,再將定位對象傳給switch_to.frame()方法,或者driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
如果完成了在當前frame上的操作,則可以通過switch_to.parent_content()方法跳出當前一級表單折欠,該方法默認對應與離它最近的switch_to.frame()方法,除此之外吼过,在進入多級表單的情況下锐秦,還可以通過switch_to.default_content()跳回最外層的頁面。
2. 多窗口切換
在頁面操作過程中有時候點擊某個鏈接會彈出新的窗口盗忱,這時候就需要主機切換到新打開的窗口上進行操作酱床。
操作方法:
- 獲得當前窗口的句柄
sreach_windows = driver.current_window_handle
- 獲得當前所有打開的窗口句柄
all_handles=driver.window_handles
- 切換到相應的窗口
switch_to.window()
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 獲得當前窗口的句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text("地圖")
# 獲得當前所有打開的窗口句柄
all_handles=driver.window_handles
# 切換到地圖窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to.window(handle)
操作元素.....
# 切換到原來窗口
or handle in all_handles:
if handle == sreach_windows:
driver.switch_to.window(handle)
3. 警告處理
在頁面操作中有時會遇到JavaScript所生成的alert、confirm以及prompt彈框售淡,可以使用switch_to_alert()方法定位到斤葱。然后使用text/accept/dismiss/send_keys等方法進行操作。
switch_to_alert()
:獲取當前頁面上的警告框(老版)揖闸。-
switch_to.alert()
:獲取當前頁面上的警告框(新版)揍堕。 -
text
:返回alert/confirm/prompt 中的文字信息。 -
accept()
:接受現(xiàn)有警告框汤纸。 -
dismiss()
:解散現(xiàn)有警告框衩茸。 -
send_keys(keysToSend)
:發(fā)送文本至警告框。keysToSend:將文本發(fā)送至警告框贮泞。
4. 操作Cookie
WebDriver操作cookie的方法
-
get_cookies()
:獲得所有cookie信息楞慈。 -
get_cookie(name)
:添加字典的key為"name"的cookie的信息幔烛。 -
add_cookie(cookie_dict)
:添加cookie。"cookie_dict'指字典對象囊蓝,必須有name和value值饿悬。 -
delete_cookie(name, optionsString)
:刪除cookie信息。"name"是要刪除的cookie的名稱聚霜,"optionsString"是該cookie的選項狡恬,目前支持的選項包括"路徑","域"。 -
delete_all_cookies()
:刪除所有cookie信息蝎宇。
5. 調(diào)用JavaScript代碼
WebDriver提供了execute_script()方法來執(zhí)行javaSrcipt代碼弟劲。
js = "要執(zhí)行的js代碼"
driver.execute_script(js)
6. 窗口截圖
WebDriver提供了截圖函數(shù)get_screenshot_as_file()來截取當前窗口。
driver.get_screenshot_as_file("保存的路徑')
7. 判斷元素是否存在
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
def is_element_exist(css):
try:
driver.find_element_by_css_selector(css)
return True
except:
return False
print(is_element_exist('#kw'))
# 判斷頁面上有無id為kw的元素
if is_element_exist("#kw"):
driver.find_element_by_id("kw").send_keys("selenium")
# 判斷頁面有無標簽為input元素
if is_element_exist("input"):
driver.find_element_by_tag_name("input").send_keys("selenium")
# 判斷頁面有無id為xxx的元素
if is_element_exist("xxx"):
driver.find_element_by_id("xxx").send_keys("selenium")