作为一名在企业信息化和数字化领域摸爬滚打多年的老兵,今天咱们就来聊聊Selenium自动化测试框架的那些常用API。别看API听起来高大上,其实它们就像我们日常工作中的工具,用好了能让工作效率翻倍。本文我将结合实际场景,深入浅出地介绍Selenium中常用的API,并分享一些我踩过的坑和总结的经验,希望能帮你少走弯路。
WebDriver 常用 API:浏览器操作
-
浏览器启动与关闭
driver = webdriver.Chrome()
:这是启动Chrome浏览器的基本操作,当然你也可以用webdriver.Firefox()
、webdriver.Edge()
等启动其他浏览器。driver.get("url")
:打开指定URL的网页,这是我们测试的起点。driver.quit()
:关闭所有浏览器窗口,并结束WebDriver会话,这是个好习惯,避免资源浪费。driver.close()
:关闭当前浏览器窗口,如果只剩一个窗口,则也会关闭浏览器。
从实践来看,我建议大家在测试脚本的最后都加上
driver.quit()
,避免留下僵尸进程。 -
窗口操作
driver.maximize_window()
:最大化浏览器窗口,让你的测试页面一览无余。driver.minimize_window()
:最小化浏览器窗口,这个通常用不上,但有时候在多窗口切换时可能会用到。driver.set_window_size(width, height)
:设置浏览器窗口大小,方便我们进行响应式测试。driver.set_window_position(x, y)
:设置浏览器窗口位置,在多显示器环境下很有用。
我个人觉得
maximize_window()
和set_window_size()
是最常用的,特别是在做UI自动化测试时,确保不同分辨率下页面显示正常。 -
页面导航
driver.back()
:后退到上一个页面,就像浏览器上的后退按钮。driver.forward()
:前进到下一个页面,对应浏览器的前进按钮。driver.refresh()
:刷新当前页面,有时候页面加载不完整可以用这个。driver.current_url
:获取当前页面的URL,方便我们做校验。driver.title
:获取当前页面的标题,也是一个常用的校验点。
在实际项目中,我经常用
current_url
和title
来验证页面是否跳转成功。
WebElement 常用 API:元素定位与交互
-
元素定位
driver.find_element(By.ID, "id")
:通过ID定位元素,这是最快也是最常用的方式,前提是元素有ID。driver.find_element(By.NAME, "name")
:通过name属性定位元素,当ID不存在时可以考虑。driver.find_element(By.CLASS_NAME, "class")
:通过class属性定位元素,但要注意class可能重复,最好配合其他定位方式。driver.find_element(By.TAG_NAME, "tag")
:通过标签名定位元素,通常不单独使用,因为重复率太高。driver.find_element(By.LINK_TEXT, "text")
:通过链接文本定位元素,用于定位超链接。driver.find_element(By.PARTIAL_LINK_TEXT, "partial_text")
:通过部分链接文本定位元素,更灵活。driver.find_element(By.XPATH, "xpath")
:通过XPath定位元素,功能强大,但编写复杂,维护成本高。driver.find_element(By.CSS_SELECTOR, "css")
:通过CSS选择器定位元素,语法简洁,效率高。
我认为,在实际工作中,
ID
、CSS_SELECTOR
和XPATH
是最常用的,其中CSS_SELECTOR
更简洁高效,所以我更偏爱它。 -
元素交互
element.click()
:点击元素,这是最常用的交互操作。element.send_keys("text")
:在输入框中输入文本,用于模拟用户输入。element.clear()
:清除输入框中的内容,在输入前最好先清除。element.submit()
:提交表单,用于提交输入框内容。element.is_displayed()
:判断元素是否可见,用于条件判断。element.is_enabled()
:判断元素是否可用,用于判断按钮是否可点击。element.is_selected()
:判断元素是否被选中,用于判断复选框和单选框。element.text
:获取元素的文本内容,用于校验。element.get_attribute("attribute_name")
:获取元素的属性值,用于校验。
我建议大家在进行交互操作前,先判断元素是否可见和可用,避免出现找不到元素的异常。
ActionChains 常用 API:模拟用户行为
-
鼠标操作
ActionChains(driver).move_to_element(element).perform()
:鼠标悬停在元素上,模拟鼠标悬停效果。ActionChains(driver).click(element).perform()
:鼠标点击元素,和element.click()
效果一样,但可以链式调用。ActionChains(driver).double_click(element).perform()
:鼠标双击元素,模拟双击操作。ActionChains(driver).context_click(element).perform()
:鼠标右键点击元素,模拟右键菜单。ActionChains(driver).drag_and_drop(source, target).perform()
:鼠标拖拽元素,模拟拖拽操作。
在实际项目中,我经常用
move_to_element()
来模拟鼠标悬停,触发下拉菜单等操作。 -
键盘操作
ActionChains(driver).send_keys(Keys.ENTER).perform()
:模拟按下回车键。ActionChains(driver).send_keys(Keys.TAB).perform()
:模拟按下Tab键。ActionChains(driver).send_keys(Keys.CONTROL, 'a').perform()
:模拟按下Ctrl+A全选。ActionChains(driver).send_keys(Keys.CONTROL, 'c').perform()
:模拟按下Ctrl+C复制。ActionChains(driver).send_keys(Keys.CONTROL, 'v').perform()
:模拟按下Ctrl+V粘贴。
键盘操作通常用于一些快捷键操作,比如复制粘贴、全选等。
Select 类常用 API:处理下拉框
-
下拉框选择
Select(element).select_by_index(index)
:通过索引选择下拉框选项,索引从0开始。Select(element).select_by_value(value)
:通过value属性选择下拉框选项。Select(element).select_by_visible_text(text)
:通过可见文本选择下拉框选项,最常用,也最直观。Select(element).options
:获取下拉框的所有选项,返回列表。Select(element).all_selected_options
:获取下拉框的所有被选中的选项,返回列表。Select(element).first_selected_option
:获取下拉框的第一个被选中的选项,返回WebElement。Select(element).deselect_all()
:取消选择所有下拉框选项,如果下拉框是多选的。
我通常用
select_by_visible_text()
来选择下拉框选项,因为文本最直观,也方便维护。
Alert 类常用 API:处理弹窗
-
弹窗处理
alert = driver.switch_to.alert
:切换到弹窗,获取弹窗对象。alert.accept()
:点击弹窗的“确定”按钮。alert.dismiss()
:点击弹窗的“取消”按钮。alert.text
:获取弹窗的文本内容,用于校验。alert.send_keys("text")
:在弹窗中输入文本,如果弹窗是输入框类型的。
在实际项目中,我经常用
alert.accept()
和alert.text
来处理和验证弹窗。
等待机制常用 API:显式等待与隐式等待
-
显式等待
WebDriverWait(driver, timeout).until(expected_conditions.presence_of_element_located((By.ID, "id")))
:显式等待元素出现,可以根据不同条件进行等待。WebDriverWait(driver, timeout).until(expected_conditions.visibility_of_element_located((By.ID, "id")))
:显式等待元素可见。WebDriverWait(driver, timeout).until(expected_conditions.element_to_be_clickable((By.ID, "id")))
:显式等待元素可点击。WebDriverWait(driver, timeout).until(expected_conditions.text_to_be_present_in_element((By.ID, "id"), "text"))
:显式等待元素文本出现。
显式等待更加灵活,可以根据不同的条件进行等待,我个人强烈推荐使用显式等待,避免出现元素未加载完成就进行操作的异常。
-
隐式等待
driver.implicitly_wait(timeout)
:设置隐式等待时间,在查找元素时,如果元素没有立即找到,会等待一段时间再继续查找。
隐式等待设置一次全局生效,但容易造成等待时间过长,降低测试效率。所以,我一般只在初始化时设置一个默认的隐式等待时间,主要还是使用显式等待。
通过这篇文章,我希望大家对Selenium的常用API有了更清晰的认识。自动化测试不仅仅是写代码,更重要的是理解业务逻辑,选择合适的工具和方法,才能真正提高测试效率和质量。记住,实践出真知,多动手,多总结,才能成为一名优秀的自动化测试工程师。在实际项目中,灵活运用这些API,结合自己的业务场景,才能构建出稳定高效的自动化测试脚本。另外,不要怕踩坑,踩坑也是成长的一部分,重要的是从坑里爬出来,总结经验,避免下次再犯同样的错误。
原创文章,作者:hiIT,如若转载,请注明出处:https://docs.ihr360.com/biz_and_flow/biz_flow/29508