幾乎所有的自動化工具要模擬用戶操作,都要識別出用戶在對哪個元素做什麼操作。
哪個元素即操作元素的識別,就是大家通常說的元素定位。Selenium根據我們提供的元素定位信息,找到對應元素,然後做後續的操作。如果元素定位有問題,則可能導致操作失敗,或者操作到其他元素,導致無法實現預期效果。
那麼如何進行元素定位呢,Selenium的WebDriver提供了8大元素定位方式,我們先看前六種元素定位方式。
1.0如何查看元素屬性
如何知道一個按鈕的ID是什麼,Name或者Class Name是什麼呢?
每個瀏覽器幾乎都有開發者工具,我們可以在裡邊進行Web前端的調試等操作:
A.可以在瀏覽器菜單中查找,或者直接按F12打開開發者工具;
B.切換到Elements頁籤,
C.點擊左上角鼠標圖標,
D.把鼠標移動到想查看的元素上,右側展示對應web元素的屬性等信息
1.1根據ID定位
假設要操作的Web元素定義如下:
這裡有個屬性是id="su",那麼我們可以根據id進行元素定位:
element = driver.find_element_by_id("su")
1.2根據NAME
這裡有個屬性是name="wd",那麼我們可以根據name進行元素定位:
element = driver.find_element_by_name("wd")
1.3根據LinkText
如果一個超鏈接元素,沒有id和name屬性,鏈接文本信息是唯一的:
那麼我們可以根據link_text進行定位:
element = driver.find_element_by_link_text(
"貼吧")1.4根據PartialLinkText
我們可以做超鏈接字符串的部分匹配:
超鏈接字符串為:Python(計算機程序設計語言)_百度百科
我們查找時進行部分匹配:在當前頁面查找超鏈接字符串包含“_百度百科”的元素
ele = driver.find_element_by_partial_link_text("_百度百科")
ele.click()
1.5根據class Name
每個元素在定義時有class屬性,相當於把這個元素劃歸到某類中:
則可以根據類別名稱進行定位:
ele = driver.find_element_by_class_name("s_ipt")
*如果元素定義時class值中間帶空格,相當於這個元素同時屬於多個類別:
按照整個class的值定位會失敗,可以根據部分類名定位:
ele = driver.find_element_by_class_name("s_ipt_wr")
1.6根據tag Name
每個元素在HTML文件中,都有個標籤名稱,如input,div,form,span等:
若元素沒有id,name這些易於定義的屬性,也可以根據標籤名稱input進行定位:
ele = driver.find_element_by_tag_name("input")
*通常一個頁面上同類型的標籤會不止一個,需要進行過濾。
更多內容請參考:
閱讀更多 古衣達 的文章