公司动态

webdriver.common.by 是 Selenium 中用于元素定位的核心模块,内部定义了`By`类

📅 2026/8/21 4:33:45
webdriver.common.by 是 Selenium 中用于元素定位的核心模块,内部定义了`By`类
webdriver.common.by核心说明webdriver.common.by 是 Selenium 中用于元素定位的核心模块内部定义了By类用于统一封装不同的元素定位策略是WebDriver实现元素查找的核心依赖。一、核心功能与定位类型By类作为抽象类提供了8种标准定位方式对应8种定位策略覆盖绝大多数元素定位场景By.ID通过元素的id属性定位通常id在页面中唯一是定位精度最高的方式例如定位携程出发城市输入框时可使用By.ID(fd_star_city)。By.NAME通过元素的name属性定位适合表单、输入框类元素当元素没有id但name属性唯一时可使用例如百度搜索框的name属性为wd可通过By.NAME(wd)定位。By.CLASS_NAME通过元素的class属性定位适合拥有统一样式的元素注意class属性可能不唯一默认返回第一个匹配的元素例如豆瓣电影评论文本的class为short可通过By.CLASS_NAME(short)定位。By.LINK_TEXT通过完整的链接文本定位超链接元素适合文字链接类元素。By.PARTIAL_LINK_TEXT通过部分链接文本模糊定位超链接元素适合链接文本较长或存在动态变化的场景。By.TAG_NAME通过HTML标签名定位通常用于定位一组同类元素单独定位单个元素时精度较低例如定位页面所有input标签可使用By.TAG_NAME(input)。By.XPATH通过XML路径语言定位元素支持层级、属性、文本等多种匹配规则适合复杂场景下的元素定位。By.CSS_SELECTOR通过CSS选择器定位元素依赖元素的样式属性规则定位效率通常高于XPATH例如百度搜索框的CSS选择器为#kw可通过By.CSS_SELECTOR(#kw)定位。二、使用规则与注意事项语法规范Selenium 4及以上版本强制要求使用find_element(By.xxx, 属性值)的方式定位元素旧版本find_element_by_xxx的写法已被弃用。场景适配不同定位方式适用于不同场景优先选择id、name这类唯一属性保证定位稳定性样式统一的元素选择CLASS_NAME超链接类元素选择LINK_TEXT或PARTIAL_LINK_TEXT复杂场景可选择XPATH或CSS_SELECTOR。等待配合如果页面元素存在动态加载的情况可配合显式等待WebDriverWait使用例如WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, kw)))通过显式等待判断元素加载完成后再执行定位避免元素未加载导致的定位失败。总结webdriver.common.by 模块的By类是Selenium元素定位的核心封装提供了8种覆盖不同场景的定位策略是UI自动化测试中定位页面元素的基础依赖。使用时优先选择稳定性高的定位方式配合Selenium 4的标准语法可配合显式等待解决动态元素的定位问题提升自动化脚本的稳定性。By类的核心定位方式By类是Selenium中封装元素定位策略的核心类共提供8种标准定位方式覆盖不同场景的元素定位需求ID定位By.ID通过元素的id属性定位元素HTML规范中id属性通常全局唯一是定位精度最高、稳定性最好的定位方式。例如百度搜索框的id为kw可通过find_element(By.ID, kw)定位。NAME定位By.NAME通过元素的name属性定位适合表单、输入框类元素。当元素没有唯一id但name属性唯一时可优先选择例如百度搜索框的name为wd可通过find_element(By.NAME, wd)定位。CLASS_NAME定位By.CLASS_NAME通过元素的class属性定位适合拥有统一样式的同类元素。注意class属性可能存在多个元素匹配的情况默认返回第一个匹配的元素且不支持复合类名定位。例如豆瓣电影评论文本的class为short可通过find_element(By.CLASS_NAME, short)定位。TAG_NAME定位By.TAG_NAME通过HTML标签名定位元素通常用于定位一组同类标签的元素单独定位单个元素精度较低。例如定位页面所有input标签可使用find_elements(By.TAG_NAME, input)获取元素列表再通过下标选择目标元素。LINK_TEXT定位By.LINK_TEXT通过超链接的完整可视文本精准定位锚元素仅适用于a标签类型的链接元素。例如百度首页的“新闻”链接可通过find_element(By.LINK_TEXT, 新闻)定位。PARTIAL_LINK_TEXT定位By.PARTIAL_LINK_TEXT通过超链接的部分可视文本模糊定位锚元素适合链接文本较长或存在动态可变内容的场景。如果存在多个匹配元素默认返回第一个匹配结果。例如可通过find_element(By.PARTIAL_LINK_TEXT, 新)定位“新闻”链接。XPATH定位By.XPATH通过XPath路径表达式定位元素支持层级匹配、属性匹配、文本匹配等多种规则通用性最强适合复杂场景下的元素定位。例如可通过find_element(By.XPATH, //input[idkw and namewd])多属性组合定位百度搜索框。CSS_SELECTOR定位By.CSS_SELECTOR通过CSS选择器定位元素依赖元素的样式属性规则定位效率通常高于XPATH。例如百度搜索框可通过find_element(By.CSS_SELECTOR, #kw)定位。使用注意事项Selenium 4及以上版本已废弃find_element_by_xxx的旧式写法强制要求使用find_element(By.定位类型, 匹配值)的标准语法。总结By类共提供8种定位方式分别是ID、NAME、CLASS_NAME、TAG_NAME、LINK_TEXT、PARTIAL_LINK_TEXT、XPATH、CSS_SELECTOR不同定位方式适配不同场景优先选择ID、NAME这类唯一属性的定位方式保证稳定性复杂场景可选择XPATH或CSS_SELECTOR实现灵活定位。