精华内容
下载资源
问答
  • Python 编写自动化工具

    万次阅读 多人点赞 2017-08-29 00:41:44
    但是假如我们要做跨平台的开发,根据每个平台去开发一套功能相同的自动化脚本显然不是最好的选择,选择跨平台通用的脚本是更好的选择,Python 就是常用来编写自动化工具的跨平台脚本语言。Python 环境安装:1.资源...

    引言:

    在开发过程中,我们经常需要编写一些自动化的工具,例如:

    • Windows 下的 BATCH (批处理)
    • Linux 下的 Shell

    但是假如我们要做跨平台的开发,根据每个平台去开发一套功能相同的自动化脚本显然不是最好的选择,选择跨平台通用的脚本是更好的选择,Python 就是常用来编写自动化工具的跨平台脚本语言。

    Python 环境安装:

    1.资源下载:

    直接到 Python 官网 下载安装包,有两个分支:2.x 和 3.x,两者有着巨大的差别,当然现在比较流行的还是 2.7.x 系列,这里我直接下载此系列的最新版本:python-2.7.13.msi

    2.安装步骤:

    过程十分简单,双击打开安装包,一直 Next 直到安装完成,记得要记录一下其安装目录,后面配置系统环境时要用到。

    3.环境配置:

    打开 计算机 -> 属性 -> 高级系统设置 -> 环境变量... ,然后再 系统变量 中新建一项,设置参数如下:

    变量名:PYTHON_HOME
    变量值:D:\Develope\Python2.7
    

    然后编辑系统变量中的 Path 变量的参数,在变量值最后加上 ;%PYTHON_HOME%;,然后保存编辑内容。然后,打开命令行窗口查询是否配置成功:

    C:\Users\hasee-pc>python --version
    Python 2.7.13
    

    以上说明环境变量的配置已完成。

    4.运行 Python:

    运行 Python 代码块的方式有两种,一种是直接在命令行窗口输入 Python 指令进入交互式编程窗口,然后直接输入代码,键盘 Enter 执行结果,如下:

    C:\Users\hasee-pc>python
    Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (
    Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print "hi,linsh"
    hi,linsh
    

    也可以创建一个 .py 脚本,编辑好脚本内容,例如:

    # test.py
    print "hi,linsh"
    

    然后,在命令行定位到脚本所在目录,执行该脚本,以下两种执行方式都可以:

    D:\Develope\PythonProjects>python test.py
    hi,linsh
    D:\Develope\PythonProjects>test.py
    hi,linsh
    

    # 号用于注释单行,多行注释通常使用三引号 '''""" 开始和结束。


    Python 基础语法:

    这里不会赘述太多细节性的语法,只简述一些必要的基础语法,更详细的可以参考 【 Python 语言参考 】:

    1.特殊标识符:

    • 跟其他编程语言一样,Python 中所有标识符可以包含:英文、数字以及下划线(_),但不能以数字开头;
    • 以下划线开头的表示特殊含义:
      • 单下划线 _ 开头表示不能直接被外部类直接访问的类属性,,需要通过类提供的接口才能进行访问,例如:_foo
      • 双下划线 __ 开头表示类的私有成员,就像很多语言中的 private 权限关键字的作用,例如:__foo
      • 以双下划线开头和结尾代表 Python 中特殊方法专用的标识,例如 __init__() 代表类的构造函数。

    2.缩进和代码块:

    Python 与其他语言最大的不同,在于它不使用 {} 或者像 Lua 那样的关键字来包裹一个代码块以管理类、函数或逻辑判断,而是直接通过 缩进 来管理模块。

    缩进的空白 数量(键盘空格键次数)是可变的,但是所有代码块语句必须包含相同的缩进空白数量。例如:

    if True:
        print "True"
    else:
      	print "False"
    

    通常将编程工具的一次 Tab 键的距离设为 4 个空格 距离,作为一级缩进的空白数。

    3.数据类型和变量:

    Python 有 5 种标准的数据类型:

    Numbers(数字)
    String(字符串)
    List(列表)
    Tuple(元组)
    Dictionary(字典)
    

    但是,在定义变量时,不需要声明变量的类型,变量在使用前需要先进行赋值,此时解释器才能根据赋值的类型为此变量分配创建内存空间并创建此变量,只是声明但不赋值的变量是不能使用的。例如:

    number = 2	    # 整型
    percent = 100.0	# 浮点型
    name = "linsh"	# 字符串
    

    此外,还可以同时对多个变量进行赋值:

    number,percent,name = 2,100.0,"linsh"
    

    4.函数:

    函数的使用一方面是为了提高代码的重用性,另一方面又可以增强代码的可读性和模块化,下面是 Python 定义函数的格式:

    def funcName(param1,param2,...):
    	...
    

    以关键字 def 来声明一个函数,紧跟着是函数名(函数标识符),然后是 () 包围起来的传入参数表,可以是 0 个参数,也可以是多个参数,然后用 : 号开始函数内容的开始。例如:

    # test.py
    # # -*- coding: utf-8 -*-
    
    # 方法定义
    def TestFunc1():
    	print "test1"
    
    def TestFunc2(num):
      	print "test2: num = ",num #str 和 int 类型拼接
        
    # 方法调用
    TestFunc1()
    TestFunc2(66)
    

    执行结果:

    D:\Develope\PythonProjects>test.py
    test1
    test2: num =  66
    

    编写工具:

    1.设计目标:

    首先说一下我要工具的功能:

    遍历某个目录下包括其下子目录中所有指定的后缀文件,然后为这些文件的头部插入指定的字符串。

    2.使用场景:

    设计这样的工具起因是我最近在将之前 CSDN 中的博客搬运到自己的 Hexo 博客空间上,了解的应该知道,假如都是 Markdown 编写的话,搬运的时候只需要在文件头部加上如下的一串额外的内容:

    ---
    title: 博客标题
    date: 博客创建时间(例如:2016-09-03 17:15:22)
    tags: 标签(如:[Hexo,Next],多个的话用,号隔开)
    categories: 分类(如:Web)
    ---
    
    • 标题 title 直接使用文件名称去掉 .md 后缀即可;
    • 时间 date 需要通过文件库获取文件的创建时间;
    • 标签 tags 和分类 categories ,由于我的文件会根据分类放入不同的子目录下,所以直接获取当前文件所在目录的名称即可。

    此外,为了在博客首页只展示部分内容,而不是展开博客的完整内容,还需要在博客中恰当的位置插入这个标签:<!--more--> ,通常加载第一段内容结束的位置。

    3.实现代码:

    根据上面的思路,我们在 source/_posts 目录下创建一个工具脚本,起名为 SuitFileToHexo.py ,然后依次完成以下步骤:

    • 指定 Linux 环境下 Python 解释器目录,并指定编码方式:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      
    • 引入的模块:

      在脚本开始的地方,最先需要做的事情就是把需要用到的模块都先引入进来,大致分析一下我们这个功能需要用到的模块:

      import os.path,time
      
    • 遍历当前目录下所有 .md 文件列表:

      这就需要使用到 Python 的文件目录操作模块 os.path ,使用 os.listdir 获取目录列表,然后通过 os.path.splitext 分割文件名称和后缀名,从而筛选合格的文件:

      # 获取指定目录指定后缀名的文件列表
      def getFileList(path,endStr):
      	'''获取指定目录下,指定后缀的文件列表'''
      	r_list = []
      	f_list = os.listdir(path)	#获取目录列表
      	for i in f_list:
      		# 分离文件名和后缀名,过滤掉工具脚本
      		file_endStr = os.path.splitext(i)[1]
      		# 判断是否是目录
      		if os.path.isdir(i):
      			f_list1 = os.listdir(path+'/'+i)
      			for j in f_list1:
      				# 过滤出指定后缀 endStr 后缀的文件
      				if os.path.splitext(j)[1] == endStr:
      					# 为了清晰目录把文件所在目录也标识出来
      					r_list.append(i+'/'+j)
      					# print j.decode("string_escape")
      		elif file_endStr == endStr:
      			r_list.append(i)
      	return r_list
      

    这里发现了一个问题,就是在 os.path.isdir(i) 在 2.7.11 的版本莫名其妙地返回 false,需要做如下修改才能正常:

     if file_endStr == '':
         i = os.path.join(path, i)   #=================〉这一行很必要
    	 # print i
    	 # 判断是否是目录
    	 if os.path.isdir(i):
    	     ...
    
    • 获取文件的创建时间:

      需要使用到 os.time 模块的功能:

      # 获取文件创建时间
      def get_FileCreateTime(filePath):
      	  t = os.path.getctime(filePath)
      	  return TimeStampToTime(t)
      
      # 把时间戳转化为时间: 1479264792 to 2016-11-16 10:53:12'''
      def TimeStampToTime(timestamp):
      	  timeStruct = time.localtime(timestamp)
      	  return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
      
    • 获取博客标题:

      其实就是从目录字符串中截掉后缀名,再截掉最后一个 / 之前的内容即可得到博客名称:

      # 获取目录中去掉前面路径和后缀的文件名字
      def getFileSimpleName(filePath):
          name = ''
          # 先去掉后缀
      	  name = os.path.splitext(filePath)[0]
      	  # 获取最后一个斜杠位置
      	  index = name.rfind('/')
      	  # 找不到则返回 -1
      	  if index != -1:
      	  # 截取斜杠后面到结尾内容
      	  name = name[index+1:]
      	  # print name
      	  return name
      
    • 获取文件所在的目录名称作为页签值:

      与获取博客名称思路略有相似,获取最后一个斜杠位置,截掉斜杠之后的内容,在获取一个最后一个斜杠位置,假如有则截取斜杠之后的内容即是文件所在目录的名称:

      # 获得分类文件目录名称
      def getTypeNameByPath(filePath):
      	fileTag = ''
      	# 获取最后一个斜杠位置
      	index = filePath.rfind('/')
      	# 找不到则返回 -1
      	if index != -1:
      		# 截取斜杠后面到结尾内容
      		fileTag = filePath[:index]
      		# 截掉前面部分
      		index = fileTag.rfind('/')
      		if index != -1:
      			fileTag = fileTag[index+1:]
      	# print fileTag
      	return fileTag
      
    • 向文件中插入内容:

      调用以上方法即可分别得到我们想要的信息:

      # 指定目录
      path = './'
      # 得到文件列表
      files = getFileList(path,'.md')	
      for i in files:
          print 'title: '+getFileSimpleName((i.decode("string_escape")))
          print 'date: '+get_FileCreateTime((path+i.decode("string_escape")))
          print 'tags: ['+getTypeNameByPath((i.decode("string_escape")))+']'
      

      接下来要做的就是把这些内容按照格式插入到文件中去,当然插入之前需要先检查文件中是否已经插入过类似的内容了,可以简单地通过检查开头 40 个字符串中是否包含这个字符串来判别:

    ‘’’—
    title: ‘’’

    
    关于展示分隔符 ``<!--more-->`` 插入的位置,大致逻辑是:第一个标题后面,而且刚好插入在第二个标题之前即可,而使用 Markdown 语法撰写的博客标题使用 ``#`` 来表示的,最终的插入方法如下:
    
    ```python
    # 向文件中插入指定数据
    def addHeadToFile(filePath,title,date,tags):
    	file = open(filePath,"r")
    	content = file.read()
    	index = content[:40].find('''---
    title:''')
    	# 添加
    	if index == -1:
    		print 'Undadded'
    		addContent = '''---
    title: '''+title+'''
    date: '''+date+'''
    tags: ['''+tags+''']
    categories: '''+tags+'''
    ---
    '''
    		# 检测是否插入部分显示标签
    		content = addContent + content
    		index = content.find('''<!--more--> ''')
    		if index == -1:
    			# 获取第一段的位置
    			index = content.find('''### ''')
    			if index != -1:
    				#print "first ### pos = ",index
    				# 下一个标题位置(在第二个标题之前插入即可)
    				pos = content[index:].find('''
    
    #''',1)
    				if pos != -1:
    					index += pos
    					#print "second enter pos = ",index
    					content = content[:index]+'''
    <!--more-->
    '''+content[index:]
    		file = open(filePath,"w")
    		file.write(content)
    	else:
    		#print 'file head had added'
    	# 记得要关闭文件
    	file.close()
    

    最后完整的调用过程:

    # 指定目录
    path = './'
    # 得到文件列表
    files = getFileList(path,'.md')	
    # 声明一些全局变量
    title = ''
    date = ''
    tags = ''
    for i in files:
        	title = getFileSimpleName(i.decode("string_escape"))
        	date = get_FileCreateTime(path+i.decode("string_escape"))
        	tags = getTypeNameByPath(i.decode("string_escape"))
        	print 'title: '+title
        	print 'date: '+date
        	print 'tags: ['+tags+']'
        	addHeadToFile(path+i.decode("string_escape"),title,date,tags)
    

    其他:

    如果你跟我一样出现了打印中文文件名变成诸如: “BATCH\xc5\xfa\xb4\xa6\xc0\xed\xbc\xf2\xbc\xc7.md” 这种格式的话,可以参考:Linux 下Python2.7解决list打印中文字符问题


    参考资料:


    微信公众号「何乐不为呢」,一个码农的技术笔记和唠叨。

    展开全文
  • Selenium 4.0-最新的测试自动化工具

    万次阅读 2020-08-24 10:08:00
    Selenium是业界领先的测试自动化工具之一,可以最大限度地实现测试自动化的目的。第一个Selenium工具于2004年作为Selenium Core推出。该Selenium测试自动化...

    Selenium是业界领先的测试自动化工具之一,可以最大限度地实现测试自动化的目的。第一个Selenium工具于2004年作为Selenium Core推出。Selenium测试自动化服务已在今年一些补充Selenium2007- IDE和Selenium的webdriver。

    下一代Selenium工具分别命名为Selenium2(2011),Selenium 3(2016),经过三年的差距,Selenium将发布其最新版本Selenium 4.0。发布被推迟,并发布了Selenium-Selenium 4.0 alpha的试用版。让我们看一下所做的新添加和修改。

    有什么新功能?

    SELENIUM IDE: Selenium IDE支持快速的测试开发过程,不需要大量的编程知识。

    Selenium的webdriver:Selenium的webdriver是一个用户友好的,并在最流行的编程语言和bowsers可用灵活的API。

    详细升级功能

    Selenium是自动化测试行业的话题,它已经发布了Selenium 4 Alpha,该版本将升级到Selenium 4.0。Selenium 4版本中可以发现以下功能;

    Web驱动程序已更改为W3c(万维网联盟)标准化:

    Selenium 4对W3C的标准化进行了更改,以鼓励WebDriver API的各种软件实现之间的兼容性。此更改可确保通信不需要API的编码和解码。这样可以形成一个更稳定的框架,并减少各种Web浏览器之间的兼容性问题。

    改进的Selenium网格

    Selenium Grid在UI和稳定性方面已被即兴创作。Selenium网格的编码已完全更改,并且网格的控制台已重组。这允许在多个浏览器和操作系统上并行执行测试用例。现在,网格可以满足节点和集线器的目的。

    Selenium 4的UI网格已创建为更加用户友好,并具有有关会话容量,运行时间和其他此类详细信息的所有相关信息。网格的另一个新增功能是支持将Docker容器与网格服务器一起使用。

    介绍了友好/相对定位器

    Selenium提供了多个显式定位符,例如id,XPath等…,新的定位符提供了一种通过考虑其他元素(例如上方,下方,从左到右,从右到近)来按位置定位元素的方法。

    支持浏览器

    对Opera&PhantomJS的现有支持将被删除。想要测试Opera的用户可以使用Chrome,而想要测试PhanthomJS的用户可以使用无头模式的Chrome或Firefox。在Selenium服务器上,HTML单元不再是默认值。

    Selenium Ide (Chrome & Firefox):

    Selenium IDE是用于记录和回放选项的工具,该工具具有许多更高级的功能。

    新插件

    Selenium IDE的旧版本只能在Google Chrome上运行,但是最新版本的Selenium 4的插件允许用户在任何可以声明以下内容的浏览器(Firefox,Google Chrome,Internet Explorer等)上运行Selenium供应商位置策略。

    新的Cli Runner

    新的CLI运行器的最新版本是基于Node.JS代码的WebDriver。这提供了回放和并行执行的功能以支持并行执行,并进一步有助于提供报告(测试报告通过和失败)。

    详细文件

    Selenium的用户面临许多困难,例如文档更新较晚。新版本有望提供更新的文档。

    更好的分析

    分析方面已得到增强-日志和调试详细信息已被改进,以加快测试人员对脚本问题的解决。

    网络与性能分析仪

    在网络分析器方面,已修改了诸如拦截请求,通过更改连接类型来模拟网络条件,启用网络跟踪之类的功能。

    在性能分析器方面,已经更新了对基于铬的边缘浏览器的支持,Firefox上的整页屏幕截图以及元素级别的屏幕截图。此外,性能包分析器还提供了一些用于收集和报告持续时间指标的方法,从而可以分析运行时性能。

    随着自动化测试行业中许多新的测试自动化工具和技术的引入,Selenium测试自动化工具始终具有领先优势,因为它具有满足组织的许多测试需求的综合潜力。

    Selenium 4.0为用户提供了最佳的体验和能力,可以执行其先前版本中的所有未完成的任务。它更快,更兼容,使其成为市场上最高效的自动化工具。

    推荐阅读

    展开全文
  • python自动化工具之pywinauto(一)

    万次阅读 多人点赞 2017-10-07 16:14:19
    python自动化工具之pywinauto(一)python自动化工具之pywinauto一 pywinauto使用 一 判断程序的backend 二确定自动化入口点 三连接到进程 四 选择菜单项pywinauto使用首先,导入这个模块from pywinauto.application ...

    python自动化工具之pywinauto(一)

    pywinauto使用

    首先,导入这个模块

    from pywinauto.application import Application

    (一) 判断程序的backend

    注意,首先需要判断你要进行的程序是用什么语言写的,在实例化的时候会有区别,主要是判断backend是什么。
    这里写图片描述

    那么如何判断程序的backend是’win32’还是’uia’呢?官方文档中推荐使用spy++和inspect来检查。有人专门整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool
    spy++咱们之前讲过。接下来将将如何使用inspect来判断backend的类别。

    Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.

    将inspect左上角的下拉列表中切换到“UI Automation”,然后鼠标点一下你需要测试的程序窗体,inspect就会显示相关信息。
    下图为点击window文件夹的结果,inspect中显示了相关的信息,如下图所示。说明backend为uia。
    这里写图片描述

    再来看点击 屏幕录像专家程序的结果
    这里写图片描述
    inspect中显示拒绝访问,说明屏幕录像专家程序的backend应该是win32。

    (二)确定自动化入口点

    这里主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。
    主要有两种对象可以建立这种入口点——Application() , Desktop().
    Application的作用范围是一个进程,如一般的桌面应用程序都为此类。
    Desktop的作用范围可以跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。使用方法见entry-points-for-automation

    (三)连接到进程

    建立好入口后,我们需要连接到进程中。这里有两种方法:
    - 重新开启一个进程。使用Application对象的start()方法

    start(self, cmd_line, timeout=app_start_timeout)  # instance method:

    这里的cmd_line参数就是你使用命令行启动程序的命令语句。所以可以很方便的实现带输入参数的程序启动。
    启动屏幕录像专家,可以使用如下代码:

    app = Application().start(r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")
    • 连接到已有的进程。使用Application对象的connect()方法。这个方法对已有进程的绑定非常灵活。
      1.使用进程ID (PID)进行绑定。
    app = Application().connect(process=19188)

    进程的PID可以在任务管理器中查看。
    这里写图片描述

    2.使用窗口句柄绑定

    app = Application().connect(handle=0x00230DB6)

    窗口句柄可以在Spy++中查看
    这里写图片描述

    3.使用程序路径绑定

    app = Application().connect(path=r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")

    4.使用标题、类型等匹配

    app = Application().connect(title_re="屏幕录像专家.*", class_name="TMainForm")

    第1、2种方法通用性不强,每次运行ID和窗口句柄都可能不一样。第3种方法最直接简单,而第4种方法灵活性最强。

    (四) 选择菜单项

    个人感觉pywinauto最方便的地方之一就是能够很轻易的操作菜单,而且对于多级菜单毫无压力。
    这里写图片描述

    下面介绍两种方法来操作它:
    - 使用menu_select()函数进行选择
    要从屏幕录像专家程序的菜单选中转换工具->EXE/LXE转成MP4。只需要在python中加入如下语句:

    dlg_spec = app.window(title='屏幕录像专家 V2017')
    dlg_spec.menu_select(r"转换工具->EXE/LXE转成MP4")
    • 使用快捷键进行选择
      可以看到,菜单的每个选项都对应着快捷键,可以使用组合的快捷键直接访问我们需要的选项。
      使用type_keys()函数,这里需要的快捷键是Alt+T+P:
    dlg_spec = app.window(title='屏幕录像专家 V2017')
    dlg_spec.type_keys('%TP')

    对于一些特殊符号的快捷键,对应的码表如下:

    SHIFT                            +      
    CTRL                             ^      
    ALT                               %
    空格键                            {SPACE}
    
    BACKSPACE                        {BACKSPACE}{BS}   or   {BKSP}      
    BREAK                            {BREAK}      
    CAPS   LOCK                      {CAPSLOCK}      
    DEL   or   DELETE                {DELETE}   or   {DEL}      
    DOWN   ARROW                     {DOWN}      
    END                              {END}      
    ENTER                            {ENTER}   or   ~      
    ESC                              {ESC}      
    HELP                             {HELP}      
    HOME                             {HOME}      
    INS   or   INSERT                {INSERT}   or   {INS}      
    LEFT   ARROW                     {LEFT}      
    NUM   LOCK                       {NUMLOCK}      
    PAGE   DOWN                      {PGDN}      
    PAGE   UP                        {PGUP}      
    PRINT   SCREEN                   {PRTSC}      
    RIGHT   ARROW                    {RIGHT}      
    SCROLL   LOCK                    {SCROLLLOCK}      
    TAB                              {TAB}      
    UP   ARROW                       {UP}     
    +                                {ADD}      
    -                                {SUBTRACT}      
    *                                {MULTIPLY}      
    /                                {DIVIDE}

    上述操作结束后,EXE转MP4的插件窗口就弹出来了。

    接下来就是如何操作这个窗口中的控件了,且听下回分解,哈哈。

    展开全文
  • 微软开源的浏览器自动化工具-Playwright

    千次阅读 多人点赞 2020-10-30 07:26:47
    软开源了一个 Python 项目:Playwright,从此又多了一个浏览器自动化工具。之前一直用 selenium 或 splinter。Playwright 可通过单个 API自动...

    软开源了一个 Python 项目:Playwright,从此又多了一个浏览器自动化工具。之前一直用 selenium 或 splinter。

    Playwright 可通过单个 API 自动执行 ChromiumFirefox 和 WebKit浏览器,支持无头浏览器(headless),Linux、macOS、Windows 下均可以使用,Playwright提供的自动化技术是绿色的功能强大,稳定且速度快。

    Playwright 最吸引我的地方在于它可以自己记录你对浏览器的操作,并将这些操作生成可以执行的代码,这简直就是神器,大大提升了浏览器自动化的效率。生成代码只需要执行

    python -m playwright codegen
    

    此外,它不像 selenium 需要再单独安装浏览器驱动,它在 pip install 时就会安装浏览器的驱动文件。

    pip install playwrightpython -m playwright install
    

    这将会安装 Playwright 和 Chromium,Firefox 和 WebKit 浏览器的二进制文件,非常方便,需要 Python 3.7 及以上版本。

    还有几个亮眼的功能:

    1、Playwright同时提供同步(阻止)API和异步API。

    它们在功能方面是相同的,只是在使用API的方式上有所不同。

    同步:

    from playwright import sync_playwright
    with sync_playwright() as p:    for browser_type in [p.chromium, p.firefox, p.webkit]:        browser = browser_type.launch()        page = browser.newPage()        page.goto('http://whatsmyuseragent.org/')        page.screenshot(path=f'example-{browser_type.name}.png')        browser.close()
    

    异步:

    import asynciofrom playwright import async_playwright
    async def main():    async with async_playwright() as p:        for browser_type in [p.chromium, p.firefox, p.webkit]:            browser = await browser_type.launch()            page = await browser.newPage()            await page.goto('http://whatsmyuseragent.org/')            await page.screenshot(path=f'example-{browser_type.name}.png')            await browser.close()
    asyncio.get_event_loop().run_until_complete(main())
    

    2、集成 pytest 测试:

    def test_playwright_is_visible_on_google(page):    page.goto("https://www.google.com")    page.type("input[name=q]", "Playwright GitHub")    page.click("input[type=submit]")    page.waitForSelector("text=microsoft/Playwright")
    

    3、交互模式运行:

    >>> from playwright import sync_playwright>>> playwright = sync_playwright().start()
    # Use playwright.chromium, playwright.firefox or playwright.webkit# Pass headless=False to see the browser UI>>> browser = playwright.chromium.launch()>>> page = browser.newPage()>>> page.goto("http://whatsmyuseragent.org/")>>> page.screenshot(path="example.png")>>> browser.close()>>> playwright.stop(
    

    4、执行 JS 代码:

    from playwright import sync_playwright
    with sync_playwright() as p:    browser = p.firefox.launch()    page = browser.newPage()    page.goto('https://www.example.com/')    dimensions = page.evaluate('''() => {      return {        width: document.documentElement.clientWidth,        height: document.documentElement.clientHeight,        deviceScaleFactor: window.devicePixelRatio      }    }''')    print(dimensions)    browser.close()
    

    5、中断网络请求:

    from playwright import sync_playwright
    
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.newPage()
    
    
        def log_and_continue_request(route, request):
          print(request.url)
          route.continue_()
    
    
        # Log and continue all network requests
        page.route('**', lambda route, request: log_and_continue_request(route, request))
    
    
        page.goto('http://todomvc.com')
        browser.close()
    

    官方文档暂时还是 Node.js 版本,不过正在转换成 Python 版本,API的调用方式相当一致,现在看 Node.js 版本的文档来编码也是无障碍的。

    官方文档:https://playwright.dev/

    GitHub 仓库:https://github.com/microsoft/playwright-python

    综上,感觉比 selenium 更好用啦,准备入坑。如果觉得文章对你有用,欢迎点赞、转发、关注,谢谢支持。

    展开全文
  • python自动化工具之pywinauto(二)

    万次阅读 多人点赞 2017-10-07 16:24:37
    python自动化工具之pywinauto(二)python自动化工具之pywinauto二 pywinauto的使用各控件的操作 如何匹配控件 如何操作控件pywinauto的使用——各控件的操作对于常见的窗口程序,需要点点填填的控件有输入框(Edit)、...
  • Appium 是一个移动端自动化测试开源工具,支持iOS 和Android 平台,支持Python、Java 等语言,即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台, Appium 是一个C/S 架构,核心是一个 Web 服务器,它提供...
  • python自动化工具之pywinauto(三)

    万次阅读 2017-10-07 18:40:53
    python自动化工具之pywinauto(三)python自动化工具之pywinauto三 问题分析 解决方案 选择源文件 配置参数 输出路径选择 等待窗口出现问题分析上篇尝试使用脚本进行模拟操作,最后失败了。 根据错误提示,应该是...
  • 老大突然间看到了小程序自动化工具,于是让我研究一下。 微信官方的文档真的是很简洁。感觉好多地方都没说清楚。。。小程序自动化官方文档 闲话不多说首先我们要先安装自动化插件 npm i miniprogram-automator --...
  • python自动化工具之pywinauto(零)

    千次阅读 2017-10-07 16:05:41
    python自动化工具之pywinauto(零)[TOC] 最近在看一个学习视频,视频是用屏幕录像大师录的,保存成exe格式。虽然也能播放,但是比较麻烦,只能在window平台播放,自带的播放器不能进行快进变速等。于是想把exe转成...
  • LightHouse是一个Google开源的自动化工具,主要用于改进网络应用(移动端)的质量。 目前测试项包括页面性能、PWA、可访问性(无障碍)、最佳实践、SEO。Lighthouse会对各个测试项的结果打分,并给出优化建议,这些...
  • Web自动化工具对比

    万次阅读 2017-05-18 19:06:54
    首先说一下我对Web自动化测试与CS自动化测试的认识。从宏观对比都是通过脚本自动化完成功能的验证,区别不大。Web测试更为显著的浏览器兼容性、安全,以及与Web技术相关的表单测试、链接测试等,其实都是功能上的...
  • python自动化工具之pywinauto(四)——批量转换exe视频python自动化工具之pywinauto四批量转换exe视频 完整代码 用法 完整代码:# -*- coding: utf-8 -*- """ Created on Wed Oct 4 16:52:13 2017@author: x """ from ...
  • 自动化工具,可以为自动化测试服务,也可以为RPA类的程序服务,完全可以自建RPA 因为工作中一直做这种模拟人为的操作动作,对以上3种自动化工具有一点心得,记录下。方便其他人使用 三种工具对比 工具 优势 劣势...
  • 最近在调研APP端自动化测试工具Appium,因为它支持跨平台、无侵入、支持原生及混合应用、支持多语言脚本编写等优点,目前Appium在移动端软件测试领域中也受到大家的广泛青睐,今天就分享一下自己的Appium搭建及使用...
  • 微信自动化工具—自动发送朋友圈(非root权限) 一、效果图 二、测试Android设备 我在这两款设备测试正常,其它设备如果有什么问题,欢迎给我反馈^_^ 夜神模拟器(Android 4.3)、华为荣耀8青春版...
  • 网易 UI 自动化工具 Airtest

    千次阅读 2018-03-19 15:18:39
    分享一个游戏测试的自动化UI测试工具,该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架,同时也支持原生Android App 的基于元素识别的UI自动化测试.详细内容地址请跳转到:...
  • 安卓自动化工具:解锁屏幕+打开支付宝蚂蚁森林+收取能量+种树浇水+自动退出   一、实现方法 Tasker(定时任务,启动各个部件)+Auto.js(脚本解锁屏幕)+Autoinput(模拟点击屏幕)+VirtualXposed(收集能量,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,253,030
精华内容 501,212
关键字:

自动化工具