定位UI元素
Selenium 的WebDriver中提供了各种方法来定位页面上的元素,这些方法列表如下所示:
find_element_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
接下来,我们使用一些示例介绍这些方法是如何定位页面元素的。
1. 通过id标签值
例如,对如下表单元素:
<div id="coolestWidgetEvah">...</div>
可使用id标签值来定位,具体实现如下:
element = driver.find_element_by_id("coolestWidgetEvah")
或者如下:
from selenium.webdriver.common.by import By
element = driver.find_element(by=By.ID, value="coolestWidgetEvah")
2. **通过name标签值
例如,对如下表单元素:
<input name="cheese" type="text"/>
可使用name标签值来定位,具体实现如下:
cheese = driver.find_element_by_name("cheese")
或者如下:
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.NAME, "cheese")
3. 通过标签名
例如,对如下表单元素:
<iframe src="..."></iframe>
可使用标签名来定位,具体实现如下:
frame = driver.find_element_by_tag_name("iframe")
或者如下:
from selenium.webdriver.common.by import By
frame = driver.find_element(By.TAG_NAME, "iframe")
4. 通过XPath来匹配
例如,对如下表单元素:
<input type="text" name="example" />
<INPUT type="text" name="other" />
可使用XPath来定位,具体实现如下:
inputs = driver.find_elements_by_xpath("//input")
或者如下:
from selenium.webdriver.common.by import By
inputs = driver.find_elements(By.XPATH, "//input")
5. 通过链接文本
例如,对如下表单元素:
<a href="http://www.google.com/search?q=cheese">cheese</a>
可使用链接文本cheese来定位,具体实现如下:
cheese = driver.find_element_by_link_text("cheese")
或者如下:
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.LINK_TEXT, "cheese")
6. 通过部分链接文本
例如,对如下表单元素:
<a href="http://www.google.com/search?q=cheese">search for cheese</a>>
可使用链接文本的一部分来定位,具体实现如下:
cheese = driver.find_element_by_partial_link_text("cheese")
或者如下:
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")
7. 通过CSS
例如,对如下表单元素:
<div id="food"><span class="dairy">milk</span>
<span class="dairy aged">cheese</span></div>
可使用CSS样式名称来定位,具体实现如下:
cheese = driver.find_element_by_css_selector("#food span.dairy.aged")
或者如下:
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")