【第十二周第 3 节】:Selenium 基础(二)

本文介绍Selenium自动化测试中常用的配置技巧,包括代理设置、去除webdriver标识、无头模式启用、加载用户缓存及插件、执行JavaScript代码、窗口操作、页面解析及等待策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十二周-第三节课

selenium配置

  • execute_path

    browser = webdriver.Chrome(executable_path=driver_path, chrome_options=chrome_options)
    
  • chrome_options

    chrome浏览器的配置对象

    https://peter.sh/experiments/chromium-command-line-switches/
    
    • 添加代理

      proxy = "127.0.0.1:8888"
      chrome_options.add_argument(f"--proxy-server={proxy}")
      
    • 去除navigator.webdriver属性

      chrome_options.add_argument("disable-blink-features=AutomationControlled")
      
    • 设置请求头

      ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
      
      chrome_options.add_argument(f"--user-agent={ua}")
      
    • 无头模式

      取消了页面渲染部分, 减少了资源消耗的同时, 增加了被反爬风险.

      chrome_options.add_argument("--headless")
      
    • 加载用户缓存

      可以像我们正常使用浏览器一样, 记录使用记录和cookie.

      如果不指定用户缓存的路径, 不指定的时候会创建临时文件夹.

      如果selenium实例没有正常销毁, 那么当前缓存文件夹不会被删除, 长此以往会占用大量磁盘空间

      chrome_options.add_argument(f"--user-data-dir={user_dir}")
      
    • 加载插件

      chrome_options.add_extension(插件路径)
      

执行JS

  • 执行JS

    browser.execute_script("return location.href")
    
  • 在页面初始前注入JS

    browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
                "source": """
                Object.defineProperty(navigator, 'webdriver', {
                        get: ()=> 'my_webdriver'
                    })
                """
            })
    

窗口操作

  • window

    • 窗口的最大化

      browser.maximize_window()
      
    • 自定义窗口大小

      browser.set_window_size(width=1660, height=960)
      
    • 新建窗口

      selenium框架是不提供新建窗口的方法的, 但是我们可以通过JS来控制新建一个窗口.

      browser.execute_script("window.open('http://baidu.com')")
      
    • 切换窗口

      新建和删除窗口不会更改当前窗口的控制权, 需要通过切换窗口来控制.

      browser.switch_to.window(self.browser.window_handles[-1])wind
      
  • frame

    窗口中的嵌套document, 需要切换到frame环境下才可以解析

    iframe = browser.find_element_by_css_selector(...)
    browser.switch_to.frame(iframe)
    
    # 切回原来的窗口环境
    # 只要切换原来的窗口即可
    browser.switch_to.window(self.browser.window_handles[index])
    

页面解析

  • 通过CSS_SELECTOR

    browser.find_element_by_css_selector
    
  • 通过BeautifulSoup库

    soup = BeautifulSoup(browser.page_source, 'lxml')
    

等待事件

  • time.sleep

  • WeDriverWaitexpected_conditions

    https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.support.expected_conditions

    等待事件本质就是根据expected_conditions进行轮询.

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 声明一个事件等待对象
    waiter = WebDriverWait(browser, 10)
    
    • 等待某个元素渲染完毕

      waiter.until(EC.presence_of_element_located((By.ID, "myDynamicElement"))
      
    • 等待当前元素在DOM可点击

      waiter.until(EC.presence_to_be_clickable((By.ID, "myDynamicElement"))
      

模拟事件

  • ActionChains

    行为链, 可以模拟连续的用户行为.

    from selenium.webdriver import ActionChains
    
    ac = ActionChains(self.browser)
    
  • 模拟鼠标输入

    • 鼠标移动, 点击事件

      # 将鼠标移动到某个元素上方
      ac.move_to_element(search_button).click().perform()
      
    • 根据相对位置移动鼠标

      move_by_offset(x, y)
      
    • 拖动元素

      drag_and_drop
      
    • 拖到元素到相对位置

      drag_and_drop_by_offset
      
  • 模拟键盘输入

    https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.common.keys

    • 模拟ENTER

      from selenium.webdriver.common.keys import Keys
      
      ac = ActionChains(self.browser)
      ac.send_keys(Keys.ENTER).perform()
      
次模块上午(10:00-12:00)下午(14:00-18:00)实战项目/作业 上午(10:00-12:00) 下午(14:00-18:00) 实战项目/作业 1 Python基础 Python语法基础:变量、数据类型、流程控制 函数、模块、异常处理;文件操作(JSON/CSV) 编写一个文件处理工具,支持JSON/CSV转换 2 Python进阶 面向对象编程:类、继承、多态 常用库:requests, logging, unittest;单元测试实践 实现一个支持日志记录的API请求工具 3 Python测试库 Pytest框架入门:用例编写、断言、夹具 参数化测试、Allure报告生成;Mock技术 为API工具编写Pytest测试用例并生成报告 4 UI自动化 Selenium基础:元素定位、页面操作 Page Object模式;Pytest集成Selenium 网站登录、搜索功能自动化 5 接口自动化 Requests深度使用:HTTP协议、会话管理 接口测试框架设计:封装请求、数据驱动 搭建接口测试框架,实现登录接口测试 6 接口高级实战 接口安全:OAuth2.0;接口依赖处理 Mock服务(使用Python库);持续集成(GitHub Actions) 实现带Token验证的接口测试 7 接口性能一体化 接口性能测试基础:Locust核心概念 编写Locust性能测试脚本;分布式压测 对接口进行压力测试并生成报告 8 性能测试 性能监控与分析:资源监控、结果分析 性能调优实战;Locust与Prometheus集成 分析性能瓶颈并优化 9 测试开发(上) 测试框架优化:插件机制、配置管理 测试报告定制:Allure次开发;钉钉/邮件通知 开发一个带通知功能的测试报告插件 10 测试开发(下) 测试工具链:Docker化测试环境 低代码测试平台初探;测试数据工厂设计 构建一个测试用例管理平台原型 把我现有的课程拆分成12课,第一课内容太多了,可以把模块的部分放第课,并且不要再新增内容了,上面第10课内容改了,改成比较常见的测试开发会做的工具,类似第9课的 通知 就很好,日常也能用到,最后一课 下午可以做大厂面试题分享以及简历分享
08-01
次模块上午(10:00-12:00)下午(14:00-18:00)实战项目/作业 上午(10:00-12:00) 下午(14:00-18:00) 实战项目/作业 1 Python基础 Python语法基础:变量、数据类型、流程控制 函数、模块、异常处理;文件操作(JSON/CSV) 编写一个文件处理工具,支持JSON/CSV转换 2 Python进阶 面向对象编程:类、继承、多态 常用库:requests, logging, unittest;单元测试实践 实现一个支持日志记录的API请求工具 3 Python测试库 Pytest框架入门:用例编写、断言、夹具 参数化测试、Allure报告生成;Mock技术 为API工具编写Pytest测试用例并生成报告 4 UI自动化 Selenium基础:元素定位、页面操作 Page Object模式;Pytest集成Selenium 网站登录、搜索功能自动化 5 接口自动化 Requests深度使用:HTTP协议、会话管理 接口测试框架设计:封装请求、数据驱动 搭建接口测试框架,实现登录接口测试 6 接口高级实战 接口安全:OAuth2.0;接口依赖处理 Mock服务(使用Python库);持续集成(GitHub Actions) 实现带Token验证的接口测试 7 接口性能一体化 接口性能测试基础:Locust核心概念 编写Locust性能测试脚本;分布式压测 对接口进行压力测试并生成报告 8 性能测试 性能监控与分析:资源监控、结果分析 性能调优实战;Locust与Prometheus集成 分析性能瓶颈并优化 9 测试开发(上) 测试框架优化:插件机制、配置管理 测试报告定制:Allure次开发;钉钉/邮件通知 开发一个带通知功能的测试报告插件 10 测试开发(下) 测试工具链:Docker化测试环境 低代码测试平台初探;测试数据工厂设计 构建一个测试用例管理平台原型 我这是给0基础的测试同学,的课程内容,但是现在课程要变成12课,所以得修改下,另外上面的课程10需要改掉,现在这个没懂啥意思,可以构建一个测试用例管理平台没错,但是没看出和10 课教的东西有什么关联
08-01
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值