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)
参考资料: