跳转至

selenium

📌 元素定位方式

  • id: 标签的id属性
  • name: 标签的name属性
  • class_name: 标签的class属性
  • tag_name: html标签的类型
  • link_text: 超链接文本
  • partial_link_text: 超链接文本的模糊匹配
  • css_selector: 相对万金油的定位方法,定位语法麻烦
  • xpath: 有自己的独特语法,基于文件系统树状结构定位

调用方法如:find_element_by_xpath或者find_element(By.XPATH,xpath)

📌 行为链

ActionChains,实现简单的交互行为,如鼠标悬停move_to_element、拖拽drag_and_drop、点击click,键盘输入send_keys,以及内容菜单交互perform等。

📌 等待

time.sleep(timeout)  # 强制等待
driver.implicitly_wait(timeout)  # 隐式等待,等待页面加载完成
WebDriverWait(driver, timeout, poll_frequency=poll_frequency, ignored_exceptions=None)  # 显式等待,等待某个元素加载完
# ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常

# WebDriverWait与until()或until_not()搭配使用
WebDriverWait(driver, 10).until(lambda x: x.find_element(by='xpath', value=value), message=f'找不到元素')

📌 WebDriver

方法 补充说明
drvier.switch_to.window(diver.window_handles[index]) 切换窗口或标签页
drvier.switch_to.alert 切换至JS弹框,再调用accept、dismiss等方法交互
drvier.switch_to.frame() 切换至指定frame
drvier.save_screenshot(path) 截图

Tip

chromedriver和chrome浏览器大版本号保持一致即可。

114及更早版本: https://chromedriver.storage.googleapis.com/index.html

130以上版本: https://googlechromelabs.github.io/chrome-for-testing


📌 驱动ai进行ui自动化

识别元素

通过playwright识别页面元素要点:

  • 使用Accessibility Tree返回的结构化数据,生成xpath表达式(按xpath定位策略优先级)
  • 示例数据必须来自真实查询结果,禁止虚构

xpath定位策略优先级

通过结构关系锚定唯一元素,而不是直接复制绝对路径的xpath表达式。

禁用绝对路径、动态class,如:/html/body/div[3]...,优先语义化定位,如://button[text()="登录"]

  • 优先级1: id定位(最稳定),如//div[@id="login"]
  • 优先级2: label关键定位(语义化),如//div[@for="login"]//span[text()="字段名"]
  • 优先级3: text定位,如//div[text()="按钮文本"]
  • 优先级4: 属性组合定位,尤其页面有loading元素遮罩时,如//div[@class="login" and @name="logintype" and not contains(@class,"loading")]
  • 优先级5: 结构关系定位,如//div[@id="login"]/following::div//div[@id="login"]/preceding-sibling::div//div[@id="login"]/parent::div
  • 优先级6: class或结构定位,如//div[@class="login"]
表达式 补充说明
following::div 获取节点后的所有div
following-sibling::div 取该节点的后一个兄弟节点
preceding-sibling::div 取该节点的前一个兄弟节点
//i/*[name()="svg"] 从根节点开始匹配,匹配所有i标签下的svg标签
button[not(@disabled)] 匹配不包含disable属性的按钮
contains(.,"{text}") 匹配包含text文本的任意标签

Tip

浏览器F12->Console调试,输入setTimeout(function(){debugger;},1000),表示过1秒后进入调试模式,在排查元素定位、元素覆盖时有用。

2025/5/18: setTimeout(()=>{debugger;},1000),同理,效果一样。

用例方法命名规范

以用户意图为导向:

  • 用户想”输入XX“,则方法名为input_XX(value)
  • 用户想”选择XX“,则方法名为select_XX(value)
  • 用户想”点击XX“,则方法名为click_XX()
  • 禁用拼音、模糊名(如field2、element1)

参考资料:

1.selenium中文文档

2.谷歌浏览器驱动下载指路