webdriver--定位一組元素+iframe表單切換

  • 定位一組元素:find_elements,返回的是list,因此能夠用列表的索引對列表裏的某個元素操做,也能夠用for循環訪問list,依次操做各元素
    driver.find_elements_by_name("OpenType")[1].click()#公開類型
    #推送範圍
    for push in driver.find_elements_by_name("GroupName"):
        push.click()
        time.sleep(1)

    定位一組元素時,造成的是list,因此list的相關語法均可以使用,切片、添加、刪除、遍歷均可以css

  • iframe表單切換

  最開始接觸到這個iframe切換的契機是,當時頁面有個彈窗,按照網上查找到的彈窗處理方式,獲取句柄,而後切到該彈窗,再定位彈窗內的元素。可是怎麼都沒法成功,定位不到彈窗裏的元素。後來問開發,看了看前端代碼,原來這個彈窗不是window窗口,而是iframe表單嵌套頁面,因此執行出錯。webdriver只能在一個頁面上對元素識別和定位,對frame/iframe表單內嵌頁面的元素沒法直接定位,因此也是須要經過swtich_to.frame()將當前定位的主題切換到表單內,表單處理完,還須要再切回原主體,才能再繼續操做原主體的元素。因此啊,仍是須要對前端了解熟悉才行,須要學習的更多了。。。前端

這段就是當時碰到的iframe嵌套的彈窗web

  #課程基礎知識頁的章節選擇
1
driver.find_element_by_id("menuled").click() 2 driver.switch_to.frame("layui-layer-iframe1")#恰好id惟一,用id定位 3 driver.find_elements_by_class_name("ico-round")[0].click()#選擇某個章節 4 driver.find_element_by_class_name("u-btn-clagre").click() 5 driver.switch_to.default_content()#返回基礎頁

這段是頁面的一個富文本的控件,用iframe嵌套的學習

   #檢測任務維護頁面
1
driver.get("http://www.zgckxt.com/THome/PC_SelfLearn/Index?id=1056&type=1") 2 driver.find_element_by_css_selector("div.m-ico>a.marr20>i.ico-queedit").click() 3 time.sleep(5) 4 driver.find_element_by_css_selector("#sinquestion").click()#選擇檢測任務:單選題 5 time.sleep(5)#選擇題型後,題乾和選項會有個加載時間,因此須要設置頁面等待時間 6 list = driver.find_elements_by_css_selector(".cke_wysiwyg_frame")#從學習任務到檢測任務的解析,一共7個這種iframe嵌套的控件 7 #del list[0] 8 list.pop(0)#去掉學習任務 9 list.pop()#去掉題目解析 10 n = 0 11 for qframe in list: 12 if n == 0: 13 driver.switch_to.frame(qframe) 14 driver.find_element_by_css_selector(".cke_editable").send_keys("單選題題幹") 15 driver.switch_to.default_content() 16 js = "window.scrollTo(document.documentElement.scrollTop,document.documentElement.scrollLeft+600);" 17 driver.execute_script(js) 18 else: 19 driver.switch_to.frame(qframe) 20 driver.find_element_by_css_selector(".cke_editable").send_keys("單選題選項%d"% n) 21 driver.switch_to.default_content() 22 n = n + 1 23 driver.find_element_by_xpath(".//*[@id='rightbox']/div[4]/div[2]/a[2]").click() 24 time.sleep(3)

能夠用switch_to.parent_content()方法跳出當前表單,返回上一級,default_content返回最外層的表單ui

相關文章
相關標籤/搜索