Selenium4中有多种元素定位方式,主要包括以下几种:
- 通过ID属性定位:根据元素的id属性进行定位。
- 通过name属性定位:当元素没有id属性而有name属性时,可以使用name属性进行元素定位。
- 通过class name定位:可以根据元素的class属性进行定位。
- 通过tag name定位:根据HTML标签名进行定位。
- 通过link text定位:根据链接的文本内容进行定位。
- 通过partial link text定位:根据链接的部分文本内容进行定位。
- 通过css selector定位:根据CSS选择器规则进行定位。
- 通过xpath定位:根据XPath表达式进行定位。
分别对应by方法的:
python
class By:
"""Set of supported locator strategies."""
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"
示例:
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
class TestCase(object):
def __init__(self):
# 初始化方法,创建一个Chrome浏览器实例并打开百度首页。
self.driver = webdriver.Chrome()
self.driver.get("https://www.baidu.com/")
self.driver.maximize_window() # 窗口最大化
sleep(1)
def test_id(self):
'''
通过ID定位搜索框,输入"selenium"并点击搜索按钮。
:return:
'''
element = self.driver.find_element(by=By.ID, value="kw")
element.send_keys("selenium")
print(type(element))
self.driver.find_element(by=By.ID, value="su").click()
sleep(3)
# self.driver.quit()
def test_name(self):
'''
通过NAME定位搜索框,输入"selenium"并点击搜索按钮。
:return:
'''
element = self.driver.find_element(by=By.NAME, value="wd")
element.send_keys("selenium")
print(type(element))
self.driver.find_element(by=By.ID, value="su").click()
sleep(3)
self.driver.quit()
def test_link_text(self):
'''
通过链接文本定位百度首页并点击。
:return:
'''
self.test_id()
self.driver.find_element(By.LINK_TEXT, value="百度首页").click()
sleep(3)
self.driver.quit()
def test_partiallink_text(self):
'''
通过部分链接文本定位百度首页并点击。
:return:
'''
self.test_id()
self.driver.find_element(By.PARTIAL_LINK_TEXT, value="首页").click()
sleep(3)
self.driver.quit()
def test_xpath(self):
'''
通过XPath定位搜索框,输入"selenium"并点击搜索按钮。
:return:
'''
element = self.driver.find_element(by=By.XPATH, value='//*[@id="kw"]')
element.send_keys("selenium")
print(type(element))
self.driver.find_element(by=By.XPATH, value='//*[@id="su"]').click()
sleep(3)
self.driver.quit()
def test_tag(self):
'''
通过标签名定位input元素。
:return:
'''
element = self.driver.find_element(by=By.TAG_NAME, value='input')
print(element)
def test_css_selector(self):
'''
通过CSS选择器定位搜索框,输入"selenium"并点击搜索按钮。
:return:
'''
element = self.driver.find_element(by=By.CSS_SELECTOR, value='#kw')
element.send_keys("selenium")
print(type(element))
self.driver.find_element(by=By.XPATH, value='//*[@id="su"]').click()
sleep(3)
self.driver.quit()
def test_class_name(self):
'''
通过类名定位搜索框,输入"selenium"并点击搜索按钮。
:return:
'''
element = self.driver.find_element(by=By.CLASS_NAME, value='s_ipt')
element.send_keys("selenium")
print(type(element))
self.driver.find_element(by=By.XPATH, value='//*[@id="su"]').click()
sleep(3)
self.driver.quit()
if __name__ == '__main__':
case = TestCase()
# case.test_id()
# case.test_name()
# case.test_link_text()
# case.test_partiallink_text()
# case.test_xpath()
# case.test_tag()
# case.test_css_selector()
case.test_class_name()
工具类封装及使用:
python
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
def get_element(driver,*loc):
# 使用find_element方法查找元素,传入定位方式和定位值
e = driver.find_element(*loc)
# 返回找到的元素
return e
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
loc = (By.ID, "kw")
get_element(driver,*loc).send_keys("selenium")
sleep(10)