Selenium基礎:元素定位的8種方法

(1) 元素定位一共有8種方法

id

惟一的

name

元素的名稱

class name

元素的類名

tag name

標籤,不推薦,重複率過高

link text

文本連接

partial link text

對文本連接的一種補充

xpath

相對/絕對路徑

css selector

css定位

1. 經過id或name定位css

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

經過元素所帶的id和name屬性對元素定位:html

  1.   brower.find_element_by_id("kw")
  2.   brower.find_element_by_name("wd")

2. 經過class name或tag name定位web

  1.   <div class="jstEditor">
  2.   <textarea cols="60" rows="10" accesskey="e" class="wiki-edit" name="issue[description]" id="issue_description">
  3.   </textarea>
  4.   </div>

經過元素中帶的class屬性定位瀏覽器

brower.find_element_by_class_name("iki-edit")

經過元素中的tag標籤訂位,這種定位方式極不靠譜,不推薦採起此種方式。less

brower.find_element_by_tag_name("div")

附加說明,若是class屬性含有空格,那麼取其中一個不重複的字段就能夠了,例子:spa

<a title="新建版本" tabindex="200" class="icon-only icon-add" data-remote="true" data-method="get" href="/projects/bk_community/versions/new">新建版本</a>

其中class的屬性值爲「icon-only icon-add」,取其中「icon-only」、「 icon-add」均可以,但最好是取其中惟一的。.net

brower.find_element_by_class_name("icon-add")

3. 經過link text和partial link text定位scala

<a href="http://news.baidu.com" target="_blank" class="mnav">新聞</a>

經過text link定位元素code

brower.find_element_by_link_text("新聞")

經過partial link text定位元素,當文字連接很長時,能夠經過此方式取其中一部分,只要取的部分能夠做爲惟一標識。orm

brower.find_element_by_partial_link_text("新")

4. xpath定位

此種定位方式需知曉xpath路徑,經過火狐瀏覽器就能夠知道,具體如何操做,可參考個人另外一篇博文

https://blog.csdn.net/qq_30990097/article/details/81325681

調用的方法爲:

brower.find_element_by_xpath("/html/body/div[1]/div/div[2]/ul/li[2]")

也能夠經過相對路徑自行填寫,例如:

//*[@id="su"]/form/span/input              #經過上三級目錄的id屬性定位

固然也能夠經過某一級的name屬性定位。

5. CSS定位

css定位有點麻煩,方法不少。以百度輸入框html代碼爲例:

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

定義瀏覽器

  1.  from selenium import webdriver
  2.   
  3.  browser = webdriver. Chrome()
  4.  browser. get("https://www.baidu.com/")
  • 經過id或class屬性定位,方法見代碼註釋
  1.   #css經過id屬性定位,用#號表示id屬性
  2.   browser.find_element_by_css_selector("#kw").send_keys("css經過id屬性定位")
  3.   #css經過class屬性定位,用.表示class屬性
  4.   browser.find_element_by_css_selector(".s_ipt").clear()
  • 經過標籤訂位
  1.   #css經過標籤屬性定位,無任何標識符,最好加上一個固定屬性,不然會出錯
  2.   browser.find_element_by_css_selector("input[class=s_ipt]").send_keys("css經過標籤屬性定位")
  3.   browser.find_element_by_css_selector("input#kw").send_keys("css經過標籤屬性定位")
  • 經過其餘屬性定位
  1.   #css經過其餘屬性定位
  2.   browser.find_element_by_css_selector("[name='wd']").send_keys("css經過name屬性定位")
  3.   browser.find_element_by_css_selector("[autocomplete='off']").clear()
  • 經過css層級關係定位

仍是以百度的輸入框html代碼爲示例:

定位代碼:

  1.   #css層級關係
  2.   browser.find_element_by_css_selector("form#form>span>input").send_keys("經過層級定位")
  3.   browser.find_element_by_css_selector("form.fm>span>input").clear()
  •  經過css索引定位

示例html代碼:

定位代碼:

  1.  #經過 css索引定位
  2.   browser.find_element_by_css_selector("select.pagination-page-list>option:nth-child(1)").click()
option:nth-child(1)就是第幾個孩子的意思。
相關文章
相關標籤/搜索