現(xiàn)在很多前端框架的對(duì)話框是 div 形式的疫鹊,也有一些彈出框iframe處理比較麻煩杉武,如上一節(jié)所說(shuō)的儡陨。使用百度登錄頁(yè)面演示一下褪子,這個(gè)登錄對(duì)話框是個(gè)div
coding=utf-8 from
selenium import webdriver driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
點(diǎn)擊登錄鏈接
driver.find_element_by_name("tj_login").click()
通過(guò)二次定位找到用戶名輸入框
div=driver.find_element_by_class_name("tang-content").find_element_by_name("userName")
div.send_keys("username")
輸入登錄密碼 driver.find_element_by_name("password").send_keys("password")
點(diǎn)擊登錄
driver.find_element_by_id("TANGRAM__PSP_10__submit").click()
driver.quit()
webdriver提供定位一組對(duì)象的方法:
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text() find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位一組對(duì)象,例一:
……
選擇頁(yè)面上所有的tag name 為input的元素
inputs = driver.find_elements_by_tag_name('input')
然后從中過(guò)濾出tpye為checkbox的元素迄委,單擊勾選
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
……
定位一組對(duì)象褐筛,例二:
……
選擇所有的type為checkbox的元素并單擊勾選
checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()
……
層級(jí)定位:
……
點(diǎn)擊Link1鏈接(彈出下拉列表) driver.find_element_by_link_text('Link1').click()
在父親元件下找到link為Action的子元素
menu = driver.find_element_by_id('dropdown1').find_element_by_link_text('Another action')
鼠標(biāo)移動(dòng)到子元素上
ActionChains(driver).move_to_element(menu).perform()
……
frame表單嵌套的定位:
switch_to_frame 方法
……
先找到到ifrome1(id = f1)
driver.switch_to_frame("f1")
再找到其下面的ifrome2(id =f2)
driver.switch_to_frame("f2")
下面就可以正常的操作元素了
driver.find_element_by_id("kw1").send_keys("selenium")
……
div彈窗的處理:
……
點(diǎn)擊登錄鏈接
driver.find_element_by_name("tj_login").click()
通過(guò)二次定位找到用戶名輸入框
div=driver.find_element_by_class_name("tang-content").find_element_by_name("userName") div.send_keys("username")
……
多窗口的處理:
current_window_handle 獲得當(dāng)前窗口句柄
window_handles 返回的所有窗口的句柄到當(dāng)前會(huì)話
switch_to_window() 用于處理多窗口之前切換
多窗口的處理:
獲得當(dāng)前窗口
nowhandle=driver.current_window_handle
打開(kāi)注冊(cè)新窗口
driver.find_element_by_name("tj_reg").click()
獲得所有窗口
allhandles=driver.window_handles
循環(huán)判斷窗口是否為當(dāng)前窗口
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print 'now register window!'
#切換到郵箱注冊(cè)標(biāo)簽
driver.find_element_by_id("mailRegTab").click()
driver.close()
driver.switch_to_window(nowhandle)#回到原先的窗口