Python+selenium+unittest框架实现网易邮箱的自动登录

Python+Selenium+unittest构建企业级UI自动化测试框架实战 UI自动化测试是现代软件工程中提升测试效率、保障软件质量的关键技术。其核心原理是通过模拟用户操作,对Web应用界面进行自动化验证。在敏捷开发和持续集成场景下,自动化测试能显著降低回归测试成本,实现快速反馈。基于Selenium的WebDriver协议,开发者可以跨浏览器操控页面元素,结合Page Object Model设计模式,能有效提升脚本的可维护性和复用性。本文以第三方邮箱登录功能为具体应用场景,详细解析如何利用Python生态构建一个工程化、可复用的自动化测试框架,涵盖环境配置、框架设计、日志记录、 阅读详情

概要

  本实例只针对简单的账密登录场景做处理,涉及登录方式切换、人机检测部分未作处理,后续会跟进处理。

整体架构流程

  • 依赖环境

        Python3.7

        selenium 3.141.0

        ddt 1.6.0

        

  • 目录结构

    

  目录说明

1. base: 公共基础方法,定位元素
2. business: 业务层,处理具体一件事情,如登录
3. case: 用例
4. config: 全局配置文件,主要配置项目 url 及页面元素定位信息
5. handle: 处理具体一件事情的某个步骤,比如输入用户名,输入验证码等
6. log: 日志文件夹
7. page: 定位具体页面的元素
8. report: 报告路径
9. screenCapture: 屏幕截图
10. util: 工具类方法,比如读取配置,获取验证码等
  • 调用关系
case->business->handle->page
  • 代码构建

1、创建projectConfig.ini项目配置文件

test/config/projectConfig.ini

[Project]
loginUrl = https://mail.163.com
timeout=5
username = username
password = password

2、创建globalElConfig.ini全局元素配置文件

test/config/globalElConfig.ini

[Login]
Tips=xpath:/html/body/header/div[1]/ul[1]/li[1]/div/span[1]
search_iframe=xpath://iframe[starts-with(@id,"x-URS")]
search_iframe2=xpath://iframe[starts-with(@id,"getMarkedContacts")]
option=xpath:lbApp
username=xpath://input[@name="email"]
password=xpath://input[@name="password"]
login_btn=xpath://*[@id="dologin"]

3、创建配置读取公共类

test/config/read_ini.py

# coding=utf-8

import configparser



class ReadIni(object):

    def __init__(self, node, file_name, encoding='utf-8'):
        self.node = node
        self.encoding = encoding
        self.cf = self.load_ini(file_name)

    def load_ini(self, file_name):
        cf = configparser.ConfigParser()
        cf.read(file_name, encoding=self.encoding)
        return cf

    def get_value(self, key):
        return self.cf.get(self.node, key)



4、创建Log日志类,记录执行日志、错误日志

test/log/user_log.py

import logging
import os
import datetime


class UserLog():
    def __init__(self):
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.INFO)
        self.fileStream = logging.FileHandler(self.__get_log_name(),encoding='utf-8')
        self.__init_logger_handle()

    def __get_log_name(self):
        log_path = os.path.join(os.path.dirname(
            os.path.abspath(__file__)), "logs")
        log_file = datetime.datetime.now().strftime("%Y-%m-%d")+".log"
        return log_path+"/"+log_file

    def __init_logger_handle(self):
        formatter = logging.Formatter(
            '%(asctime)s %(filename)s %(funcName)s %(lineno)s %(levelname)s --->%(message)s')
        self.fileStream.setFormatter(formatter)
        self.logger.addHandler(self.fileStream)

    def close(self):
        self.fileStream.close()
        self.logger.removeHandler(self.fileStream)

    def get_logger(self):
        return self.logger


if __name__ == "__main__":
    log = UserLog()
    logger = log.get_logger()
    logger.info("打一年工搬一年砖")
    log.close()

5、创建元素查找公共类

test/base/find_element.py

# encoding=utf-8
from config.read_ini import ReadIni
import os
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as EC
import selenium.webdriver.support.ui as ui


class FindElement(object):

    def __init__(self, driver, node,
                 config=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'config',
                                     'globalElConfig.ini')):
        self.driver = driver
        self.read_ini = ReadIni(node, config)
        self.read_project = ReadIni('Project',
                                    os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'config',
                                                 'projectConfig.ini'))
        self.config = config

    def get_element(self, key):
        timeout = self.read_project.get_value('timeout')
        webDriverWait = ui.WebDriverWait(self.driver, int(timeout))
        try:
            by, value = self.get_locator(key)
            if not by or not value:
                print(f"Failed to get locator for key {key}")
                return None
            print(f"Finding element by {by} with value {value}")
            if by == 'id':
                return webDriverWait.until(EC.presence_of_element_located((By.ID, value)))
            elif by == 'name':
                return webDriverWait.until(EC.presence_of_element_located((By.NAME, value)))
            elif by == 'classname':
                return webDriverWait.until(EC.presence_of_element_located((By.CLASS_NAME, value)))
            elif by == 'cssSelector':
                return webDriverWait.until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))
            else:
                return webDriverWait.until(EC.presence_of_element_located((By.XPATH, value)))
        except Exception as e:
            print(f"Exception occurred while finding element: {e}")
            return None

    def get_elements(self, key):
        timeout = self.read_project.get_value('timeout')
        webDriverWait = ui.WebDriverWait(self.driver, int(timeout))
        try:
            by, value = self.get_locator(key)
            if not by or not value:
                print(f"Failed to get locator for key {key}")
                return None
            print(f"Finding elements by {by} with value {value}")
            if by == 'id':
                return webDriverWait.until(EC.visibility_of_all_elements_located((By.ID, value)))
            elif by == 'name':
                return webDriverWait.until(EC.visibility_of_all_elements_located((By.NAME, value)))
            elif by == 'classname':
                return webDriverWait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, value)))
            elif by == 'cssSelector':
                return webDriverWait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, value)))
            else:
                return webDriverWait.until(EC.visibility_of_all_elements_located((By.XPATH, value)))
        except Exception as e:
            print(f"Exception occurred while finding elements: {e}")
            return None

6、创建webdriver工具类

test/util/webdriver.py

import json
import sys

from selenium import webdriver
from selenium.webdriver import DesiredCapabilities


class myWebdriver(object):
    @staticmethod
    def get_driver():
        chrome_options = webdriver.ChromeOptions()  # 创建 Chrome 浏览器选项
        chrome_options.add_experimental_option('w3c', False)  # 设置 w3c 实验性选项为 False,确保浏览器兼容
        caps = DesiredCapabilities.CHROME  # 设置浏览器能力 (caps):
        caps['loggingPrefs'] = {'performance': 'ALL'}  # 设置了 loggingPrefs,以便收集所有性能相关的日志
        chrome_options.add_argument('--disable-gpu')  # 添加禁用 GPU 的选项
        if 'linux' in sys.platform:  # 根据操作系统设置无头模式
            chrome_options.add_argument('--headless')
        driver = webdriver.Chrome(desired_capabilities=caps, options=chrome_options)  # 创建 Chrome 浏览器驱动
        driver.implicitly_wait(10)  # 设置隐式等待时间:10s
        driver.set_window_size(1936,
                               1056) if 'linux' in sys.platform else driver.maximize_window()  # 最大化窗口在--headless模式下无效,导致linux截图太小,所以手动设置
        return driver

    @staticmethod
    def save_performance_log(driver, filename):
        logs = [json.loads(log['message'])['message'] for log in driver.get_log("performance")]
        with open(filename, 'a') as f:
            json.dump(logs, f, indent=4, ensure_ascii=False)

7、创建页面page元素获取类,处理具体一件事情的某个步骤

test/page/login_page.py

# coding=utf-8
from base.find_element import FindElement
import os


class LoginPage(object):
    #  获取globalElConfig.ini配置Login节点下配置
    def __init__(self, driver):
        self.fd = FindElement(driver, 'Login')

    # 初始化iframe框架,默认嵌套一层
    def get_iframe_element(self):
        return self.fd.get_element("search_iframe")

    #  多个iframe框架切换
    def get_iframe2_element(self):
        return self.fd.get_element("search_iframe2")

    #  获取断言结果元素
    def get_err_tips_elements(self):
        return self.fd.get_elements("errTips")

    #  获取账密登录按钮
    def get_option_element(self):
        return self.fd.get_element("option")

    # 获取用户名元素
    def get_username_element(self):
        return self.fd.get_element("username")

    # 获取密码元素
    def get_password_element(self):
        return self.fd.get_element("password")

    # 获取登录按钮元素
    def get_login_btn_element(self):
        return self.fd.get_element("login_btn")

9、创建handle应用类,处理

test/handle/login_handle.py

from handle.handle import Handle
from page.login_page import LoginPage


class LoginHandle(Handle):
    def __init__(self, driver):
        super().__init__(driver)
        self.login_p = LoginPage(driver)

    # iframe框架调用
    def into_iframe_work(self):
        frame = self.login_p.get_iframe_element()
        self.driver.switch_to.frame(frame)

    def quit_iframe_work(self):
        self.driver.switch_to.default_content()

    # 输入用户名
    def send_user_name(self, username):
        username_element = self.login_p.get_username_element()
        username_element.send_keys(username)

    # 输入密码
    def send_user_password(self, password):
        password_element = self.login_p.get_password_element()
        password_element.send_keys(password)

    # 点击登录按钮
    def click_login_btn(self):
        self.login_p.get_login_btn_element().click()

    #  截取断言文本
    def get_tips(self):
        tips = self.login_p.get_err_tips_elements()
        if tips is None:
            print('元素未找到!')
            return None
        if len(tips) > 1:
            print('出现多条提示!')
        tip = tips[-1].text
        print(tip)
        return tip

10、创建business业务类,处理具体一件事情

test/business/login_business.py

# coding=utf-8
from handle.login_handle import LoginHandle


class LoginBusiness(object):
    def __init__(self, driver):
        self.login_h = LoginHandle(driver)

    def click_option_success(self, username, password):
        self.login_h.into_iframe_work()  # 进入iframe框架
        self.login_h.send_user_name(username)  # 输入用户名
        self.login_h.send_user_password(password)  # 输入密码
        self.login_h.click_login_btn()  # 点击登录按钮
        self.login_h.quit_iframe_work()  # 退出iframe框架,因为断言元素不在框架内
        return self.login_h.get_tips()  # 获取断言结果返回

11、创建TestCase类,初始化浏览器,利用ddt构建测试数据集,Unittest框架执行单元测试用例

test/case/login_case.py

# coding=utf-8
import os
import unittest
import datetime
import ddt
from log.user_log import UserLog
from business.login_business import LoginBusiness
from config.read_ini import ReadIni
from util.webdriver import myWebdriver


@ddt.ddt
class LoginCass(unittest.TestCase):
    @classmethod
    def setUpClass(cls):  # 读取配置节点
        cls.driver = myWebdriver.get_driver()
        cls.log = UserLog()
        cls.logger = cls.log.get_logger()
        cls.readIni = ReadIni('Project',
                              os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'config',
                                           'projectConfig.ini'))
        cls.loginUrl = cls.readIni.get_value('loginUrl')

    def setUp(self):
        self.driver.get(self.loginUrl)
        self.login_b = LoginBusiness(self.driver)

    def tearDown(self):
        for method_name, error in self._outcome.errors:
            if error:
                # case_name=self._testMethodName
                self.logger.info(error)
                case_name = str(method_name)[:str(method_name).find("(")]
                file_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'screenCapture',
                                         case_name + '.png')
                self.driver.save_screenshot(file_path)
        log_file = 'login_case_' + datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
        myWebdriver.save_performance_log(self.driver,
                                         os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
                                                      'log', 'performancelog', log_file))

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()
        cls.log.close()
 #  通过usernmae@163.com用户名断言判断是否登录成功
    @ddt.data(['username', 'password', 'username@163.com'])
    @ddt.unpack
    def test_1_login_case(self, username, password, tips):
        actual_tips = self.login_b.click_option_success(username, password)
        self.assertEqual(actual_tips, tips)

12、创建HTMLTestRunner测试报告类,记录测试过程,保存测试结果test/util/HTMLTestRunner.py

HTMLTestRunner最新内容见:

http://tungwaiyip.info/software/HTMLTestRunner.html

13、创建Test_main测试套件,用于批量执行测试用例,生成测试报告

test/case/test_main.py

import os
import unittest
from util.HTMLTestRunner import HTMLTestRunner

if __name__ == "__main__":
    # unittest.main()
    report_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'report', 'result.html')
    with open(report_path, 'wb') as f:
        discover = unittest.defaultTestLoader.discover('./', pattern="*_case.py")  # 批量执行case用例
        #suite = unittest.TestLoader().loadTestsFromTestCase(LoginCass)
        runner = HTMLTestRunner(
            stream=f, title="web自动化测试报告", description=u"网易邮箱", verbosity=2)
        runner.run(discover)

执行Test_main查看Result结果:

技术细节

  • driver.switch_to.frame()  #iframe框架切换

 driver.switch_to.frame() 方法是 Selenium 中用于切换到特定 iframe 或 frame 的方法。在网页自动化测试中,很多网页可能包含 iframe(内嵌框架),这些框架是嵌套在主页面中的独立 HTML 文档。要在这些 iframe 中进行操作,需要先切换到对应的 iframe。

语法:

//进入iframe框架     driver.switch_to.frame(reference)

//退出iframe框架     driver.switch_to.default_content()

参数:

reference 可以是以下三种之一:

  1. 索引(index):从 0 开始的整数,表示要切换到的 iframe 在页面上的顺序。
  2. 名字或 ID(name or id):iframe 的 name 或 id 属性的值。
  3. WebElement 对象:已经找到的 iframe 元素对象。

  • 分割定位器字符串,并提取定位器类型和值
# 分割定位器字符串
arr = value.split(':', 1)  # 只分割一次
if len(arr) != 2:
    print(f"Invalid locator format for key {key}: {value}")
    return None, None

  • 将读取到的值按照冒号 : 分割成两个部分,split(':', 1) 表示只分割一次。
  • 如果分割后的结果不是两个部分,则说明格式不正确,打印提示信息并返回 None, None。
# 提取定位器类型和值
by, locator_value = arr[0], arr[1]
return by, locator_value
  • 将分割后的第一个部分赋值给 by,表示定位器类型(如 id, name, xpath 等)。
  • 将分割后的第二个部分赋值给 locator_value,表示定位器值。
  • 返回定位器类型和定位器值。

小结

       

UnitTest 是 Python 中的一个单元测试框架,用于编写和运行测试用例。它提供了一个结构化的方法来组织测试代码,并能够自动化执行测试并生成结果报告。

主要特点和用法:

  1. 测试用例(Test Case):

    • 测试用例是 unittest 的核心概念,通常继承自 unittest.TestCase 类。
    • 每个测试用例是一个独立的测试单元,用于验证被测试代码的某个方面或功能是否正确。
  2. 断言方法(Assertions):

    • unittest 提供了多种断言方法,用于检查预期结果与实际结果是否一致,例如 assertEqual(), assertTrue(), assertIn() 等。
    • 当断言失败时,会抛出 AssertionError 异常,标记测试失败。
  3. 测试装置(Test Fixture):

    • unittest 支持设置测试装置,包括 setUp() 和 tearDown() 方法。
    • setUp() 方法在每个测试方法运行前执行,用于准备测试环境。
    • tearDown() 方法在每个测试方法运行后执行,用于清理测试环境。
  4. 测试套件(Test Suite):

    • 测试套件是一组相关的测试用例的集合,可以用来组织和运行多个测试。
    • 可以使用 unittest.TestSuite() 创建测试套件,并将测试用例添加到套件中。
  5. 运行器(Test Runner):

    • unittest 提供了命令行接口和 GUI 工具来运行测试用例。
    • 常用的运行器包括 unittest.TextTestRunner()(文本输出)、unittest.TextTestResult(详细文本输出)、unittest.XMLTestRunner(XML 格式输出)等。
  6. 跳过测试和预期异常:

    • 可以使用装饰器 @unittest.skip(reason) 跳过某个测试用例。
    • 使用 @unittest.expectedFailure 装饰器标记预期会失败的测试用例。
Python实现模拟登录网易邮箱的方法示例 主要介绍了Python实现模拟登录网易邮箱的方法,结合实例形式分析了Python基于urllib2及cookielib模块的http请求、数据传输及交互相关操作技巧,需要的朋友可以参考下 立即下载

相关推荐

Python+Flask+Echarts打造全国气象数据可视化分析大屏

本文详细介绍了如何使用Python+Flask+Echarts构建全国气象数据可视化分析大屏,实现实时监控、趋势分析和快速决策。通过Python强大的数据处理能力、Flask的轻量级优势和Echarts的交互体验,打造高效的气象数据可视化系统,提升农业、物流等行业的决策效率。

weixin_29061531的博客 1059

python+selenium+unittest实现自动登录

from selenium import webdriver import unittest import time class HomePageLogin(unittest.TestCase): def setUp(self): print(‘开始执行测试用例:’) url = ‘填入登录页面的链接’ self.driver = webdriver.Chrome() self.driver.get(url) def test_bubutton(self): self.driver.find_elem

xiaoxiaozhang11的博客 683

块坐标下降法实战:如何用Python一步步优化无人机通信网络?

本文通过Python实战案例,详细介绍了块坐标下降法在优化无人机通信网络中的应用。文章以最大化网络吞吐量为目标,将复杂的非凸问题拆解为功率分配和轨迹规划两个子问题,并提供了完整的算法实现、代码示例及调参指南,为机器学习工程师解决类似优化问题提供了实用参考。

sat99的博客 975

python + selenium + unittest 实现网站登录注册自动化测试

登录封装: from selenium import webdriver import time class Auto(object): def __init__(self, *args): login_url = 'https://snail.zhuozhuo.io/?n=fastCat.fcFrontSnail.NewFront.NewFront.PCLoginPage' register_url = "https://getsuwo.com/?n=fastCa

zzt(仲天)的博客 2794

贝塞尔曲线在机器人路径平滑中的实战应用与优化

本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。

weixin_29051811的博客 304

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 677

selenium+python自动化测试--登录

前言:已经学习selenium许久了,奈何公司的项目还在码代码中...,感觉自己学的东西快忘的差不多了,所以就找个网站练练手,顺便回顾一下UI自动化的知识,也希望跟我一样的小白有所受益。 一、用例分析(根据所测网站对应分析) 用例1: 正确输入手机号和密码,点击登录 期望:有帮助中心字样(系统跳至首页后,会有个帮助中心,也可以选择其他字样作为判定,这里不方便截图:) 用例2: ...

weixin_30724853的博客 448

【学习系列】SAP RAP 18:Unmanaged场景开发示例-基本数据更新

本文介绍了在SAP RAP中unmanaged模式下从0到1的开发步骤。unmanaged模式下需要自行实现数据更新、权限检查等逻辑,适用于操作现有数据库表或复杂业务场景。文章以两层的采购订单对象为例,详细说明了创建技术对象(表、视图、行为定义等)的过程,并重点阐述了如何实现CRUD相关方法的核心逻辑。通过创建缓冲类来处理交互阶段和保存阶段的数据操作,确保事务一致性。完整代码展示了抬头层级的增删改查功能实现,为后续明细层级的开发奠定了基础。

DeveloperMrMeng的博客 637

【Selenium+python】自动化测试登录界面

前言:已经学习selenium许久了,奈何公司的项目还在码代码中...,感觉自己学的东西快忘的差不多了,所以就找个网站练练手,顺便回顾一下。这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!当然,还有测试用例没列举完,比如特殊字符、长度等的校验,由于测试的这个网站没有相关校验(😶无奈。期望:有帮助中心字样(系统跳至首页后,会有个帮助中心,也可以选择其他字样作为判定,这里不方便截图:)只输入手机号不输入密码,点击登录。

2301_78843735的博客 753

CAP CDS 和 ABAP Cloud 的 CDS 有什么区别?

摘要:SAP生态中的CAP CDS与ABAP CDS虽同名但存在显著差异。CAP CDS定位为全栈应用的领域模型与服务契约语言,支持声明式建模并直接编译为服务接口;而ABAP CDS更侧重数据语义层,与ABAP平台深度集成,服务于SQL优化和服务发布链路。两者在语法、持久化方式、服务暴露机制及权限模型上均有不同:CAP CDS采用CDL语法,支持模型即服务;ABAP CDS基于ABAP DDL,通过视图定义语义并与RAP框架紧密耦合。这些差异反映了二者在不同平台中的设计哲学和应用场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 204

【软考中级网络工程师】知识点之常用网络诊断和配置命令

本文聚焦软考中级网络工程师必备的网络诊断和配置命令,详细解析 ipconfig、ping、arp 等 11 类核心命令。涵盖各命令的功能、语法、常用参数及应用场景,如 ipconfig 查看配置、ping 测试连通性等。还通过图呈现命令执行逻辑与流程,助读者理解原理。最后结合软考考点回顾重点并提供真题练习,为备考和实际运维提供全面指导,是掌握网络命令的实用参考。

邓邓子的博客 1538

web自动化实现登录的几种方式

python+unittest框架模拟登录功能 python+selenium模拟登录功能 python+requests库模拟登录功能

帅小缙的大脑风暴❤ 2460

数据分享:中国历年省、市、县行政区划shp(1949~2023年共计75年)

中华人民共和国县级以上行政区沿革》(三册,1949-1983年)“The Atlas of Changes of Administrative Regions of China”;《中华人民共和国行政区划沿革地图集》The yearly publications of “The Administrative Regions”, 1985-2014;每年的出版行政区划简册(1985-2014年)行政区划网:www.xzqh.org。行政区划网:www.xzqh.org。

J_Giser的博客 3685

unittest自动化测试框架的使用(网易邮箱的登录及邮件发送)

本文将介绍unittest的核心用法,及用python+selenium+unittest框架实现网易邮箱的登录及邮件发送自动化操作。 一、unittest简介 unittest是python内置的单元测试框架,不需要安装。只要接触过python,或者做自动化测试,必会的测试框架。它算是入门级的框架,pytest都是在基于unittest的基础上深入的。如果有兴趣想了解pytest框架的,可以参考我的另一篇博客:pytest从入门到精通2021最新教程 unitest的使用,无非就是基于它四大核心概念的.

weixin_45230019的博客 7094

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python写邮箱系统登录_Python selenium登录163邮箱示例

思路:使用python自带的unittest单元测试框架测试163邮箱登录成功的caseimport unittestfrom selenium import webdriverimport time#定义登录类,登录相关的case都可以在这里class LoginCase(unittest.TestCase):#每个用例开始前的准备def setUp(self):print("开始测试")sel...

weixin_39582724的博客 459

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

selenium自动化入门之实现163邮箱发送邮件

实现一个入门级的UI自动化测试,实现163邮箱登录,及发送邮件功能。基于最基本的代码,元素定位,切换iframe。基于测试框架-unittest实现,最后生成测试报告。 1. 代码编写 直接上代码: from selenium import webdriver from time import sleep import unittest class Wangyi(unittest.TestCase): def test_wang(self): driver=webdriver..

weixin_45230019的博客 5428

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Web自动化】Python3+Selenium 框架⑹——unittest组织用例

本章节主要讲解excel测试用例(UI_TestCase.xlsx)、unittest组织登录测试用例,其中需要用到读取UI_TestCase.xlsx测试数据、paramunittest(参数化)、调用loginPage类、断言等方法。 详细如下: 一、UI_TestCase.xlsx 二、test_login.py # _*_ coding:utf-8 _*_ from selenium import webdriver .

测试领域技术分享 729

python3.6实现126邮箱登录

在这个实例中需要注意的是:iframe的切换,试了好几种都切换不成功,目前这个是成功的实例,希望可以帮助到大家! from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditio...

Marry_Ma的博客 1087

Python 3 + Selenium 3 简单入门学习示例 126邮箱登录

这是一个很多基础演示的书上的例子,但是一般按照这些书上的代码可能都不能成功登录。也许是网易修改了126的页面导致的吧,下面给出最新的能够work的版本 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support ...

weixin_30696427的博客 265

自动化总结之 (Unittest的应用2 )

unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。基本用法如下: 1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase): 3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。 4.定义测试用例,名字以test

m0_70618214的博客 257

自动化测试python selenium案例_Python3+Selenium Web自动化测试案例分享⑹——unittest组织用例...

#_*_ coding:utf-8 _*_from selenium import webdriver #导入浏览器模块from Page.loginPage import Login_page #导入登录对象类from Public import log,readConfig,r...

weixin_39549899的博客 207

自动化测试基础篇:Selenium unittest 简介

接触过Java语言的朋友一定对Junit单元测试框架不陌生,对于Python语言,同样有类似的单元测试框架Unittest。

软件测试技术交流分享 572

自动化测试基础篇--Selenium unittest简介

一、什么是unittest unittest是Python单元测试框架,类似于JUnit框架。 unittest中有4个重要的概念:test fixture, test case, test suite, test runner Testcase: 一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测...

bangxijiu6026的博客 252

python+appium+unittest

python+appium+unittest

liluo00000的博客 878

python+selenium2学习笔记POM设计模式-03testcase

import unittest from LoginPage import LoginPage from selenium import webdriver class caselogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.i...

u013434475的博客 354
上一篇: sh脚本添加-e参数后报错read: Illegal option -e
下一篇: 常见的网络通信协议
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打一年工搬一年砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值