自动化测试中的核心是元素定位,只有在定位到对象的基础上,才可以对对象进行操作。
在一个页面中有很多种方法可以定位到元素。在项目中,你可以选择最合适的方法去定位到元素,selenium提供了以下方法:
定位单个元素(匹配第一个符合条件的元素)
find_element_by_id
find_element_by_name
find_element_by_tag_name
find_element_by_class_name
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_xpath
find_element_by_css_selector
定位一组元素(返回一个list列表)
find_elements_by_id
find_elements_by_name
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_xpath
find_elements_by_css_selector
除了上面的公共方法,还有两个私有方法,他们是find_element和find_elements 。
用法示例:
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.find_element(By.ID, 'kw')
driver.find_elements(By.TAG_NAME, 'div')
下面是By类的可用属性:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
因此上面的 driver.find_element(By.ID, 'kw') 也可以直接写成 driver.find_element("id", 'kw')
接下来,我们用上面的方法来试试吧。以下是百度输入框元素截图:
通过id定位
driver.find_element_by_id("kw")
通过name定位
driver.find_element_by_name("wd")
通过class name定位
driver.find_element_by_class_name("s_ipt")
通过xpath定位
driver.find_element_by_xpath("//input[@id='kw']")
通过css selector定位
driver.find_element_by_css_selector("#kw")
通过link text定位百度首页的设置
driver.find_element_by_link_text("设置")
通过partial link text定位百度首页的设置(通过部分文本内容定位)
driver.find_element_by_partial_link_text("设置")
通过tag name定位
页面元素如下:
<html>
<body>
<h1>Welcome</h1>
<p>Site content goes here.</p>
</body>
<html>
driver.find_element_by_tag_name("h1")