掌握Selenium4:详解各种定位方式

Selenium4中有多种元素定位方式,主要包括以下几种:

  1. 通过ID属性定位:根据元素的id属性进行定位。
  2. 通过name属性定位:当元素没有id属性而有name属性时,可以使用name属性进行元素定位。
  3. 通过class name定位:可以根据元素的class属性进行定位。
  4. 通过tag name定位:根据HTML标签名进行定位。
  5. 通过link text定位:根据链接的文本内容进行定位。
  6. 通过partial link text定位:根据链接的部分文本内容进行定位。
  7. 通过css selector定位:根据CSS选择器规则进行定位。
  8. 通过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)
相关推荐
老孟说禅8 分钟前
自动化测试入门(一)
开发语言·python
miofly15 分钟前
GitHub 今日推荐|Snapintosh:用 ARM EL2 监控器骗过内核,让骁龙芯片笔记本跑 macOS
python·开源·github
打工仔折腾 AI20 分钟前
Linux 网络编程:从零掌握 TCP Socket 编程与 C++ 实战落地
linux·网络·人工智能·后端·python·tcp/ip·性能优化
我命由我1234541 分钟前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
Zella折耳根1 小时前
实验2进阶版数据看板的设计与实现
python
databook1 小时前
让 LLM 输出不再失控:用 Pydantic 校验大模型输出
人工智能·python·llm
jingcairensheng1 小时前
vscode 配置Python虚拟环境基于扩展和原生miniconda的区别
ide·vscode·python
“AI国潮设计-小江”1 小时前
《【AIGC实战】Python+SDXL批量生成“英歌舞草莓抱抱卷蛋糕”IP插牌立牌方案,锁定角色一致性,甜品插件化落地》
开发语言·人工智能·python·prompt·aigc
LMT流氓兔1 小时前
第五单元——第7课:工具读取用户身份,而不是让模型填写身份
python·langchain
FlyWIHTSKY1 小时前
Agent阶段一:基础夯实
python·ai·fastapi