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" |