splinter,一个超酷的 Python 库!

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


大家好,今天为大家分享一个超酷的 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%免费】
在这里插入图片描述​​
在这里插入图片描述​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值