📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
大家好,今天为大家分享一个超酷的 Python 库 - splinter。
Github地址:https://github.com/cobrateam/splinter
Splinter是一个用于自动化Web浏览器操作的Python库,它为Web应用的测试和自动化提供了简洁的API接口。作为Selenium的高级封装,Splinter简化了浏览器自动化的复杂性,使开发者能够更容易地实现页面导航、元素交互和数据提取等功能。
安装
Splinter的安装过程需要完成以下步骤:
# 基本安装
pip install splinter
# 安装浏览器驱动支持
pip install selenium
pip install webdriver_manager
# 验证安装
from splinter import Browser
browser = Browser('chrome')
browser.quit()
基本功能
1. 浏览器操作
本示例详细展示了Splinter的基本浏览器操作功能,包括页面访问、导航和元素定位等。这些是自动化Web操作的基础功能,对于实现网页交互至关重要。
from splinter import Browser
from webdriver_manager.chrome import ChromeDriverManager
def demonstrate_browser_operations():
# 初始化浏览器
browser = Browser('chrome',
executable_path=ChromeDriverManager().install())
try:
# 访问网页
browser.visit('https://example.com')
# 页面导航
browser.back()
browser.forward()
browser.reload()
# 填写表单
browser.fill('username', 'testuser')
browser.fill('password', 'testpass')
# 点击元素
browser.find_by_text('Login').first.click()
# 获取页面标题
title = browser.title
return title
finally:
browser.quit()
2. 元素交互和数据提取
本示例展示了如何使用Splinter进行元素定位、交互和数据提取。这些功能对于实现自动化测试和数据采集非常重要。
from splinter import Browser
import time
from typing import List, Dict
class WebAutomator:
def __init__(self):
self.browser = Browser('chrome')
def wait_for_element(self, selector: str, timeout: int = 10):
"""等待元素出现"""
start_time = time.time()
while time.time() - start_time < timeout:
if self.browser.is_element_present_by_css(selector):
return True
time.sleep(0.5)
return False
def extract_data(self, url: str, selectors: Dict[str, str]) -> Dict:
"""提取页面数据"""
try:
self.browser.visit(url)
data = {}
for key, selector in selectors.items():
if self.wait_for_element(selector):
element = self.browser.find_by_css(selector).first
data[key] = element.text
else:
data[key] = None
return data
except Exception as e:
print(f"提取数据时出错: {str(e)}")
return {}
def close(self):
"""关闭浏览器"""
self.browser.quit()
高级功能
1. JavaScript执行
本示例说明了如何在Splinter中执行JavaScript代码,这对于处理动态加载内容和复杂的页面交互非常有用。
from splinter import Browser
import json
class JavaScriptHandler:
def __init__(self, browser: Browser):
self.browser = browser
def execute_script(self, script: str):
"""执行JavaScript代码"""
return self.browser.evaluate_script(script)
def scroll_to_bottom(self):
"""滚动到页面底部"""
self.browser.execute_script(
'window.scrollTo(0, document.body.scrollHeight);'
)
def get_page_data(self) -> Dict:
"""获取页面数据"""
script = """
return {
'title': document.title,
'url': window.location.href,
'viewport': {
'width': window.innerWidth,
'height': window.innerHeight
}
}
"""
return self.browser.evaluate_script(script)
2. 文件上传和下载
本示例展示了如何使用Splinter处理文件上传和下载操作,这在自动化测试和数据处理中经常需要使用。
from splinter import Browser
import os
from pathlib import Path
import time
class FileHandler:
def __init__(self, browser: Browser, download_dir: str):
self.browser = browser
self.download_dir = download_dir
Path(download_dir).mkdir(parents=True, exist_ok=True)
def upload_file(self, file_path: str, upload_selector: str):
"""上传文件"""
try:
self.browser.attach_file(
upload_selector,
os.path.abspath(file_path)
)
return True
except Exception as e:
print(f"文件上传失败: {str(e)}")
return False
def wait_for_download(self, timeout: int = 30) -> str:
"""等待文件下载完成"""
start_time = time.time()
while time.time() - start_time < timeout:
# 检查下载目录
downloads = list(Path(self.download_dir).glob('*'))
if downloads:
# 等待文件下载完成
time.sleep(1)
return str(downloads[0])
time.sleep(0.5)
return ""
实际应用场景
自动化测试系统
本示例展示了如何使用Splinter构建一个完整的Web应用自动化测试系统,包括登录测试、表单验证和功能测试等。
from splinter import Browser
import logging
from datetime import datetime
from typing import List, Dict
class WebTester:
def __init__(self):
self.browser = Browser('chrome')
self.logger = self._setup_logger()
def _setup_logger(self):
"""设置日志系统"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
return logging.getLogger('web_tester')
def test_login(self, url: str, credentials: Dict) -> bool:
"""测试登录功能"""
try:
self.browser.visit(url)
# 填写登录表单
self.browser.fill('username', credentials['username'])
self.browser.fill('password', credentials['password'])
# 提交表单
self.browser.find_by_css('button[type="submit"]').first.click()
# 验证登录结果
if self.browser.is_element_present_by_text('Welcome'):
self.logger.info("登录测试通过")
return True
else:
self.logger.error("登录测试失败")
return False
except Exception as e:
self.logger.error(f"登录测试出错: {str(e)}")
return False
def test_form_submission(self, form_data: Dict) -> bool:
"""测试表单提交"""
try:
# 填写表单字段
for field, value in form_data.items():
self.browser.fill(field, value)
# 提交表单
self.browser.find_by_css('button[type="submit"]').first.click()
# 验证提交结果
if self.browser.is_element_present_by_text('Success'):
self.logger.info("表单提交测试通过")
return True
else:
self.logger.error("表单提交测试失败")
return False
except Exception as e:
self.logger.error(f"表单测试出错: {str(e)}")
return False
def run_test_suite(self, test_cases: List[Dict]):
"""运行测试套件"""
results = []
for test in test_cases:
start_time = datetime.now()
if test['type'] == 'login':
success = self.test_login(
test['url'],
test['credentials']
)
elif test['type'] == 'form':
success = self.test_form_submission(
test['data']
)
end_time = datetime.now()
duration = (end_time - start_time).total_seconds()
results.append({
'test_name': test['name'],
'success': success,
'duration': duration
})
return results
def close(self):
"""关闭测试浏览器"""
self.browser.quit()
总结
Python Splinter库是一个强大的Web自动化工具,它简化了浏览器操作和测试流程。通过提供直观的API和丰富的功能,Splinter使开发者能够轻松实现网页交互、数据提取和自动化测试。本文详细介绍了从基础操作到高级功能的应用,并通过实际测试系统展示了Splinter在Web自动化领域的实用价值。对于需要进行Web自动化的开发者而言,Splinter是一个理想的选择。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】