Selenium除了用于Web应用程序的测试外,还可以执行许多自动化操作。以下是一些Selenium可以实现的功能,并附带相应的代码示例来详细说明:
- 自动化操作:
使用Selenium,我们可以模拟用户的行为,如点击、输入、滚动等。
python复制代码
|---|----------------------------------------------------------|
| | from selenium import webdriver
|
| | from selenium.webdriver.common.keys import Keys
|
| | from selenium.webdriver.common.by import By
|
| | |
| | # 初始化浏览器驱动
|
| | driver = webdriver.Chrome()
|
| | |
| | # 打开网页
|
| | driver.get('https://www.example.com')
|
| | |
| | # 查找元素并点击
|
| | search_box = driver.find_element(By.ID, 'search-box')
|
| | search_box.send_keys('Selenium')
|
| | search_box.send_keys(Keys.RETURN)
|
| | |
| | # 关闭浏览器
|
| | driver.quit()
|
- 跨浏览器测试:
Selenium支持多种浏览器,只需更换对应的WebDriver即可。
python复制代码
|---|---------------------------------|
| | # 对于Firefox浏览器
|
| | driver = webdriver.Firefox()
|
| | |
| | # 对于Chrome浏览器
|
| | driver = webdriver.Chrome()
|
| | |
| | # 对于Edge浏览器
|
| | driver = webdriver.Edge()
|
| | |
| | # ... 以此类推,根据需要选择浏览器
|
- 截图功能:
Selenium允许我们捕获当前页面的截图。
python复制代码
|---|--------------------------------------------------------------------------------|
| | from selenium import webdriver
|
| | from selenium.webdriver.chrome.service import Service
|
| | from webdriver_manager.chrome import ChromeDriverManager
|
| | |
| | # 初始化浏览器驱动
|
| | driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
|
| | |
| | # 打开网页
|
| | driver.get('https://www.example.com')
|
| | |
| | # 截图
|
| | driver.save_screenshot('screenshot.png')
|
| | |
| | # 关闭浏览器
|
| | driver.quit()
|
- 执行JavaScript脚本:
Selenium提供了执行JavaScript代码的方法。
python复制代码
|---|-------------------------------------------------------|
| | from selenium import webdriver
|
| | |
| | driver = webdriver.Chrome()
|
| | driver.get('https://www.example.com')
|
| | |
| | # 执行JavaScript脚本
|
| | driver.execute_script("alert('Hello, Selenium!')")
|
| | |
| | # 关闭浏览器
|
| | driver.quit()
|
- 表单验证测试:
Selenium可以模拟表单提交,并检查验证结果。
python复制代码
|---|------------------------------------------------------------------|
| | from selenium import webdriver
|
| | from selenium.webdriver.common.by import By
|
| | from selenium.common.exceptions import NoSuchElementException
|
| | |
| | driver = webdriver.Chrome()
|
| | driver.get('https://www.example.com/login')
|
| | |
| | # 输入用户名和密码
|
| | username_input = driver.find_element(By.ID, 'username')
|
| | username_input.send_keys('my_username')
|
| | |
| | password_input = driver.find_element(By.ID, 'password')
|
| | password_input.send_keys('my_password')
|
| | |
| | # 提交表单
|
| | submit_button = driver.find_element(By.ID, 'submit')
|
| | submit_button.click()
|
| | |
| | try:
|
| | # 检查是否出现错误消息
|
| | error_message = driver.find_element(By.ID, 'error-message')
|
| | print("Error:", error_message.text)
|
| | except NoSuchElementException:
|
| | print("Form submitted successfully!")
|
| | |
| | # 关闭浏览器
|
| | driver.quit()
|
- 等待AJAX请求完成:
Selenium提供了显式等待(Explicit Waits)来处理AJAX请求。
python复制代码
|---|----------------------------------------------------------------------------------|
| | from selenium import webdriver
|
| | from selenium.webdriver.common.by import By
|
| | from selenium.webdriver.support.ui import WebDriverWait
|
| | from selenium.webdriver.support import expected_conditions as EC
|
| | |
| | driver = webdriver.Chrome()
|
| | driver.get('https://www.example.com/ajax-page')
|
| | |
| | # 等待某个元素出现
|
| | wait = WebDriverWait(driver, 10)
|
| | element = wait.until(EC.visibility_of_element_located((By.ID, 'my-element')))
|
| | |
| | # 执行后续操作
|
| | print(element.text)
|
| | |
| | # 关闭浏览器
|
| | driver.quit()
|
- 与其他测试框架集成:
Selenium可以很容易地与unittest、pytest等测试框架集成,实现测试用例的编写和运行。
以pytest为例,你可以编写如下的测试用例:
python复制代码
|---|------------------------------------------------|
| | import pytest
|
| | from selenium import webdriver
|
| | from selenium.webdriver.common.by import By
|
| | |
| | @pytest.fixture(scope="module")
|
| | def driver(request):
|
| | wd = webdriver.Chrome()
|
| | wd.implicitly_wait(10)
|
| | request.addfinalizer(wd.quit)
|
| | return wd
|
| | |
| | def test_example_com(driver):
|
| | driver.get("https://www.example.com")
|
| | assert "Example Domain"
|