一、前言

大家都知道,基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于 Python 的 Selenium

Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。

二、环境安装

安装 python,这个。。。忽略,建议 python3.7。

安装基于 python 的 selenium 依赖包,命令:pip install selenium

安装浏览器驱动包,推荐使用 chrome 浏览器的chromedriver.exe,对应 chrome 版本一定要对哦,不然运行不起来的,安装在哪?想放哪放哪,不过一般是放在 python 的根目录下。下载地址:chromedriver.storage.googleapis.com/index.html

安装 PyCharm ,这个无脑安装~然后可自定义界面 UI 及编码风格,这个。。。忽略

三、牛刀小试

1. 控制浏览器

#coding=utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

driver.maximize_window() #将浏览器最大化显示

driver.set_window_size(480, 800) #设置浏览器宽480、高800显示"

driver.back() #后退

driver.forward() #前进

driver.close() #关闭chrome

driver.quit() # 退出chrome

如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:603401995,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

2. 对象的定位

通过 id 定位:find_element_by_id()

通过 name 定位:find_element_by_name()

通过 class 定位:find_element_by_class_name()

通过 tag 定位:find_element_by_tag_name()

通过 link 定位:find_element_by_link_text()

通过 partial_link 定位:find_element_by_partial_link_text()

通过 xpath 定位:find_element_by_xpath()

通过 css 定位:find_element_by_css_selector()

以上几种定位是常规操作,应该就基本够用了,但是有的时候就是会出现一些诡异的定位失效或者定位到了点击失效的问题,这个时候如果用js进行直接执行该事件,接下来介绍下非常规操作:

id 定位:document.getElementById()

name 定位:document.getElementsByName()

tag 定位:document.getElementsByTagName()

class 定位:document.getElementsByClassName()

css 定位:document.querySelectorAll()

search_js = "document.getElementsByName('wd')[0].value='selenium';"# 通过name定位,然后赋值“selenium”

search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';"# 通过css定位,然后赋值“selenium”

button_js = "document.getElementById('su').click();"# 通过id定位,然后执行单击操作

button_js2 = "document.getElementsByClassName('s_btn')[0].click()"# 通过className定位,然后执行单击操作 driver.execute_script(search_js2)#执行,execute_script(script, *args)

以上几种定位是可以再度升级,可以利用 jQuery 定位一波

3. 操作测试对象

#coding=utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://passport.kuaibo.com/login/")

driver.find_element_by_id("user_name").clear() #清除输入框的默认内容

driver.find_element_by_id("user_name").send_keys("username")

driver.find_element_by_id("user_pwd").clear()

driver.find_element_by_id("user_pwd").send_keys("password") #输入输入框的内容为“password”

driver.find_element_by_id("dl_an_submit").click() #通过 submit() 来提交操作

driver.find_element_by_id("dl_an_submit").submit()

size=driver.find_element_by_id("kw").size #返回百度输入框的宽高 text=driver.find_element_by_id("cp").text #返回百度页面底部备案信息

#返回元素的属性值,可以是 id、name、type 或元素拥有的其它任意属性

attribute=driver.find_element_by_id("kw").get_attribute('type') #返回元素的结果是否可见,返回结果为 True 或 False

result=driver.find_element_by_id("kw").is_displayed()

driver.quit() #退出

复制代码

4. 鼠标键盘事件

from selenium import webdriver #引入 Keys 类包

from selenium.webdriver.common.keys import Keys #引入 ActionChains 类

from selenium.webdriver.common.action_chains import ActionChains

... #鼠标事件 #定位到要操作的元素

right =driver.find_element_by_xpath("xx") #对定位到的元素执行鼠标右键操作

ActionChains(driver).context_click(right).perform() #对定位到的元素执行鼠标双击操作

ActionChains(driver).double_click(right).perform() #对定位到的元素执行鼠标移动到上面的操作

ActionChains(driver).move_to_element(right).perform() #对定位到的元素执行鼠标左键按下的操作

ActionChains(driver).click_and_hold(right).perform() #定位元素的原位置

element = driver.find_element_by_name("xxx") #定位元素要移动到的目标位置

target = driver.find_element_by_name("xxx") #执行元素的移动操作

ActionChains(driver).drag_and_drop(element, target).perform() #键盘事件 #删除多输入的一个 值

driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) #输入空格键+“教程”

driver.find_element_by_id("kw").send_keys(Keys.SPACE)

driver.find_element_by_id("kw").send_keys(u"教程") #ctrl+x 剪切输入框内容

driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') #其余的键盘操作类似

5. 等待时间

#coding=utf-8

from selenium import webdriver #导入 WebDriverWait 包

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC #导入 time 包

import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com") #WebDriverWait()方法使用,显示等待,WebDriverWait(driver,超时时长,调用频率,忽略异常).until(可执行方法,超时返回的信息),这里可以调用EC来实现可执行方法

is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“kw”).is_displayed()) #until(method, message=’ ’),调用该方法提供的驱动程序作为一个参数,直到返回值不为 False

element.send_keys("selenium") #添加智能等待,隐时等待

driver.implicitly_wait(30)

driver.find_element_by_id("su").click() #添加固定休眠时间,强制等待

time.sleep(5)

driver.quit()

6. 组对象定位及层级定位,呃,忽略

7. 多窗口处理

#coding=utf-8

from selenium import webdriver import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com/") #获得当前窗口

nowhandle=driver.current_window_handle #打开注册新窗口

driver.find_element_by_name("tj_reg").click()

allhandles=driver.window_handles #循环判断窗口是否为当前窗口

for handle in allhandles: if handle != nowhandle:

driver.switch_to_window(handle) print 'now register window!'

#切换到邮箱注册标签

driver.find_element_by_id("mailRegTab").click()

time.sleep(5)

driver.close() #回到原先的窗口

driver.switch_to_window(nowhandle)

driver.find_element_by_id("kw").send_keys(u"注册成功!")

time.sleep(3) #ifrome处理 #这里会自动识别id,name,如果没有则可以将元素通过选择器找到,然后输入该元素即可

driver.switch_to_frame("f1")

element = driver.find_element_by_id("kw")

driver.switch_to_frame(element)

driver.quit() 

复制代码

8. 提示窗口处理

#coding=utf-8

from selenium import webdriver import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com/") #点击打开搜索设置

driver.find_element_by_name("tj_setting").click()

driver.find_element_by_id("SL_1").click() #点击保存设置

driver.find_element_by_xpath("//div[@id='gxszButton']/input").click() #获取网页上的警告信息

alert=driver.switch_to_alert() #接收警告信息

alert.accept() #取消对话框(如果有的话)

alert.dismiss() #输入值(如果有的话)

alert.send_keys(“xxx”)

9. 控制浏览器滚动条,这个运用之前提示的jq语句即可实现

10. cookie处理,主要用途在于处理验证码问题

#coding=utf-8

from selenium import webdriver import time

driver = webdriver.Chrome()

driver.get("http://www.youdao.com") #向 cookie 的 name 和 value 添加会话信息。

driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'}) #遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息

for cookie in driver.get_cookies(): print "%s -> %s" % (cookie['name'], cookie['value']) ##### 下面可以通过两种方式删除 cookie ##### # 删除一个特定的 cookie

driver.delete_cookie("CookieName") # 删除所有 cookie

driver.delete_all_cookies()

time.sleep(2)

driver.close()

复制代码

四、小结

如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:603401995,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

在熟悉了selenium常见的API基本操作后,这里便可以开展实际测试用例的设计了,一个良好的自动化测试用例起码符合一下五个条件:

1、一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。

2、一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统

3、尽量只做功能中正向逻辑的验证,不要考虑太多逆向逻辑的验证,逆向逻辑的情况很多(例如手 号输错有很多种情况),验证一方面比较复杂,需要编写大量的脚本,另一方面自动化脚本本身比较脆弱, 很多非正常的逻辑的验证能力不强。(我们尽量遵循用户正常使用原则编写脚本即可)

4、脚本之间不要产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。

5、如果对数据进行了修改,需要对数据进行还原。 6、在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。

最后配合unittest或者testNG单元测试框架,实现分层、数据驱动、断言、截图、日志等全方位功能,得心应手的开展自动化测试工作。

python webui测试ie浏览器环境配置_python+selenium做ui自动化测试用法必会相关推荐

  1. Python网络爬虫简介与环境配置

    第一章 Python网络爬虫简介与环境配置 1.1 网络爬虫简介 随着互联网的快速发展越来越多的信息被发布到互联网上,这些信息被嵌入到各种各样的网页结构及样式中.虽然搜索引擎可以辅助用户搜索这些网页信 ...

  2. Mac电脑的python下载、安装和环境配置——JDK+python+pycharm

    Mac电脑的python下载.安装和环境配置--JDK+python+pycharm 之前一直用的windows,换了Mac之后用的还有些生疏,刚好都是重新配置就随手记一下 之前一直用的windows ...

  3. python 浏览器模拟手机_Python selenium —— 用chrome的Mobile emulation模拟手机浏览器测试手机网页...

    很多人发现chrome有项功能,就是在开发者工具里能够模拟手机打开网页,便想能否用selenium对此进行自动化测试.答案当然是yes! chrome-emulation 今天博主便给大家分享下如何用 ...

  4. Python 基础入门--简介和环境配置

    2019 年第 32 篇,总 56 篇文章 本文大约 1w 字,建议收藏阅读 上周结束了如何构造一个机器学习项目的系列文章,当然还有一篇简单的总结以及介绍一些入门的学习资料,不过还在整理,应该这周内会 ...

  5. sublime text3安装python插件和flake8_Sublime Text环境配置(Python、Latex、Markdown)及常见问题汇总...

    目录 安装 基本设置 万包之祖 Package Control Python 环境配置 Markdown环境配置 Sublime问题汇总 macOS+Latex环境配置 安装 从官方网站地址下载安装即 ...

  6. Python爬虫APP抓包环境配置

    工于利其事,必先利其器,在开始APP数据抓取之前,环境配置必不可少. 一套完美的开发环境,将使你未来的开发工作事半功倍. 一.抓包工具 抓包工具有很多,比较热门的有Wireshark.Fiddler. ...

  7. 【Python的安装步骤及环境配置】

    一.下载软件 1.去Python官网下载 2.百度分享https://pan.baidu.com/s/1yKR2VI_fX8DewwiWy1yDDQ 提取码:6666 图1-1 二.软件安装 1.首先 ...

  8. web自动化如何在不同浏览器运行_测试冷知识科普:使用Selenium来计算自动化测试的投资回报率...

    跨浏览器测试是一种测试,需要大量的精力和时间.通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动. 特别是如果手动处理,使用Seleni ...

  9. nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

    文章目录 写在前面 nnUNet是什么? 一.配置虚拟环境 二.安装nnUNet框架 1.安装nnUNet 这一步我遇到的两个问题: 2.安装隐藏层hiddenlayer(可选) 三.数据集准备 nn ...

最新文章

  1. Learn OpenGL (六):坐标系统
  2. React Native —— App
  3. HDU 3501 Calculation 2
  4. MTK 修改默认Text-to-speech Patch
  5. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-softmax多分类-06
  6. Java—关于单例模式的实现方式
  7. linux删除第二列为空_Linux之基本文本处理工具(二)
  8. java element string_Java StackTraceElement toString()方法
  9. Android对接蓝牙打印机
  10. 仿iGoogle自定义首页模块拖拽效果
  11. 行列式java_n阶行列式的全排列求解(Java)
  12. BlackBerry Internet Service故障:公司内部同事无法互通邮件,对外联络没有问题
  13. Spring Web 编程详解
  14. 300万数据导入导出优化方案,从80s优化到8s(实测)
  15. 一个游戏程序员的学习资料【转】
  16. 第九章第八题(Fan类)(Fan class)
  17. 接口和接口实现类,接口与抽象类
  18. cad老是弹出命令中发生异常_CAD出现致命错误的解决方法
  19. 团队作业-Beta冲刺(2)
  20. LoRaWAN设备接入阿里云IoT企业物联网平台实战——实践类

热门文章

  1. jsp解决mysql乱码_解决mysql+jsp出现乱码的问题
  2. python hook_python_理解篇_钩子方法的理解
  3. java框架谁搭建_从零开始搭建一个开发框架(Java + Hibernate + Spring + Oracle)
  4. 软件工程 Beta 阶段 团队贡献分数
  5. java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印
  6. axure怎么做5秒倒计时_罗胖60秒:怎么做一个课程?
  7. linux离线安装redmine_Feem:免流量跨平台文件传输工具,支持离线分享
  8. python中用于标识字符串的定界符_001.python-基础-Template的字符串格式化
  9. 什么是编程语言,大神教你为什么要学C语言?
  10. 【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)