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