selenium 常見方法和頁面元素的操作

HuangZhang_123發表於2017-03-01

歡迎加入學習交流QQ群:657341423


selenium總共有八種定位方法
By.id() 通過id定位
By.name() 通過name 定位
By.xpath() 通過xpath定位
By.className() 通過className定位
By.cssSelector() 通過CSS 定位
By.linkText() 通過linkText
By.tagName() 通過tagName
By.partialLinkText() 通過匹到的部分linkText

其中用得最多的是xpath,cssSelector,而且用這兩種定位,基本上可以解決大部分網頁定位困難,至於id,name有時候不能適用於網頁,這個具體情況還是看網頁Html怎樣設計的。

XPath-利用元素屬性定位

find_element_by_xpath("//input[@id=‘kw’]")

find_element_by_xpath("//input[@name=‘wd’]")

find_element_by_xpath("//*[@id=‘kw’]")

//input表示查詢頁面上所有的input元素

*//表示查詢頁面上所有元素

//input[1]表示查詢頁面上第一個input元素

//form[1]/input 表示查詢第一個form元素下一級的input元素

//form[1]//input 表示查詢頁面上第一個form元素下的所有input元素,不管巢狀了多少層

//input[@id=‘kw’ and @class=‘su’] 可以用 and 連線多個屬性來唯一標識一個元素

查詢頁面根元素://

查詢頁面上所有的input元素://input

查詢頁面上第一個form元素內的直接子input元素(即只包括form元素的下一級input元素,使用絕對路徑表示,單/號)://form[1]/input

查詢頁面上第一個form元素內的所有子input元素(只要在form元素內的input都算,不管還巢狀了多少個其他標籤,使用相對路徑表示,雙//號)://form[1]//input

查詢頁面上第一個form元素://form[1]

查詢頁面上id為loginForm的form元素://form[@id=‘loginForm’]

查詢頁面上具有name屬性為username的input元素://input[@name=‘username’]

查詢頁面上id為loginForm的form元素下的第一個input元素://form[@id=‘loginForm’]/input[1]

查詢頁面具有name屬性為contiune並且type屬性為button的input元素://input[@name=‘continue’][@type=‘button’]

查詢頁面上id為loginForm的form元素下第4個input元素://form[@id=‘loginForm’]/input[4]

常見的cssSelector的定位方式:

定位id為flrs的div元素,可以寫成:#flrs 注:相當於xpath語法的//div[@id=’flrs’]

定位id為flrs下的a元素,可以寫成 #flrs > a 注:相當於xpath語法的//div[@id=’flrs’]/a

定位id為flrs下的href屬性值為/forexample/about.html的元素,可以寫成: #flrs > a[href=”/forexample/about.html”]

如果需要指定多個屬性值時,可以逐一加在後面,如#flrs > input[name=”username”][type=”text”]。

*此外,cssSelector還有一些高階用法,如果熟練後可以更加方便地幫助我們定位元素,如我們可以利用^用於匹配一個字首,$用於匹配一個字尾,用於匹配任意字元。例如:

匹配一個有id屬性,並且id屬性是以”id_prefix_”開頭的超連結元素:a[id^=‘id_prefix_’]

匹配一個有id屬性,並且id屬性是以”_id_sufix”結尾的超連結元素:a[id$=’_id_sufix’]

匹配一個有id屬性,並且id屬性中包含”id_pattern”字元的超連結元素:a[id*=‘id_pattern’]

通過class屬性定位
find_element_by_css_selector(".類屬性值") class選擇器選擇class="a"的所有元素,點號(.)表示通過class屬性定位元素
driver.find_element_by_css_selector(".s_ipt").send_keys(“css”)
driver.find_element_by_css_selector(".bg s_btn").click()
通過id定位元素
find_element_by_css_selector("#id值") id選擇器選擇id="a"的所有元素,#號表示通過id屬性定位元素
driver.find_element_by_css_selector("#kw").send_keys(“huh”)
driver.find_element_by_css_selector("#su").submit()
通過標籤名定位元素(少用)
find_element_by_css_selector(“input”)
通過標籤屬性定位
find_element_by_css_selector("[屬性名=屬性值]")
driver.find_element_by_css_selector("[ maxlength=‘255’]").send_keys(“dfaf”)
driver.find_element_by_css_selector("[ value=‘百度一下’]").submit()
對於屬性值來說,可加引號,也可以不加,但注意和整個字串的引號進行區分!!!
通過標籤父子關係定位(少用吧)
find_element_by_css_selector(“父標籤>子標籤”)
find_element_by_css_selector(“span>input”)表示選擇父標籤為span的所有input元素
組合定位(通過父子標籤和其屬性結合)
組合定位可以大大加強定位元素的唯一性!
driver.find_element_by_css_selector(“form#form>span>input”).send_keys(“asfa”)
driver.find_element_by_css_selector(“form#form>span>input#su”).click()
要定位的元素是input,父元素是span,爺元素是form;
要定位的元素是input(可以結合它的屬性值),父元素是span,爺元素是form(可以結合它的屬性值)
其實通過css定位也可以像xpath定位那樣通過firebug工具獲得再修改,或選擇要定位的標籤後右鍵-》複製css路徑也行。

各種方式在選擇的時候應該怎麼選擇:

  1. 當頁面元素有id屬性時,最好儘量用id來定位。但由於現實專案中很多程式設計師其實寫的程式碼並不規範,會缺少很多標準屬性,這時就只有選擇其他定位方法。

  2. xpath很強悍,但定位效能不是很好,所以還是儘量少用。如果確實少數元素不好定位,可以選擇xpath或cssSelector。

  3. 當要定位一組元素相同元素時,可以考慮用tagName或name。

  4. 當有連結需要定位時,可以考慮linkText或partialLinkText方式。


歡迎加入學習交流QQ群:657341423

相關文章