一、简单实例演示

1.创建 python_org_search.py:

  1. #!/usr/bin/env python
  2.  
  3. from selenium import webdriver
  4. from selenium.webdriver.common.keys import Keys
  5.  
  6. # 创建Chrome驱动实例
  7. driver = webdriver.Chrome()
  8. # 启动浏览器并且导航到指定URL
  9. driver.get("http://www.python.org")
  10. # 断言“Python”出现在浏览器标题
  11. assert "Python" in driver.title
  12. # 定位name属性为“q"的元素
  13. elem = driver.find_element_by_name("q")
  14. # 清空文本输入框,输入文字"pycon",然后回车
  15. elem.clear()
  16. elem.send_keys("pycon")
  17. elem.send_keys(Keys.RETURN)
  18. # 断言"No results found."不包含在当前页面源代码中
  19. assert "No results found." not in driver.page_source
  20. # 关闭浏览器
  21. driver.close()

2.运行脚本

  1. python python_org_search.py

二、使用Selenium编写测试用例

selenium package 本身并不提供测试框架,我们可以通过Python’s unittest module 来编写组织我们的测试用例,如下实例 “python.org 搜索功能的测试用例”

test_python_org_search.py:

  1. #!/usr/bin/env python
  2.  
  3. import unittest
  4. from selenium import webdriver
  5. from selenium.webdriver.common.keys import Keys
  6.  
  7. class PythonOrgSearch(unittest.TestCase):
  8. """ 用例类继承unittest.TestCase """
  9.  
  10. def setUp(self):
  11. """ 用例初始化,每个用例执行之前调用,通常用于初始化测试环境"""
  12. self.driver = webdriver.Chrome()
  13.  
  14. def test_search_in_python_org(self):
  15. """测试用例XXX,方法命名通常以test_开头"""
  16. driver = self.driver
  17. driver.get("http://www.python.org")
  18. self.assertIn("Python", driver.title)
  19. elem = driver.find_element_by_name("q")
  20. elem.send_keys("pycon")
  21. elem.send_keys(Keys.RETURN)
  22. assert "No results found." not in driver.page_source
  23.  
  24. def tearDown(self):
  25. """用例销毁,每个用例执行完成后调用,通常用于销毁测试环境"""
  26.  
  27. self.driver.close()
  28.  
  29. if __name__ == "__main__":
  30. unittest.main() # 执行测试用例集

运行测试用例

  1. python test_python_org_search.py

.
----------------------------------------------------------------------
Ran 1 test in 9.171s

OK

三、Selenium 分布式测试

Selenium Grid 可以在不同的主机上建立主节点(hub)和分支节点(node),可以使主节点上的测试用例在不同的分支节点上运行。对于不同的节点来说,可以搭建不同的测试环境(操作系统,浏览器),从而使一份测试用例得到不同环境下的执行结果。

Grid2不再提供单独的包,其功能已经集成到SeleniumServer中。

1、启动主节点hub:要使用远程WebDriver,必须先启动Selenium Server,启动后,如下提示,则说明主节点hub已经成功启动

  1. D:\selenium>java -jar selenium-server-standalone-3.5..jar -role hub
  2. ::26.494 INFO - Selenium build info: version: '3.5.0', revision: '8def36e068'
  3. ::26.495 INFO - Launching Selenium Grid hub
  4. -- ::27.269:INFO::main: Logging initialized @1003ms to org.seleniumhq.jetty9.util.log.StdErrLog
  5. ::27.288 INFO - Will listen on
  6. -- ::27.352:INFO:osjs.Server:main: jetty-9.4..v20170502
  7. -- ::27.385:INFO:osjs.session:main: DefaultSessionIdManager workerName=node0
  8. -- ::27.386:INFO:osjs.session:main: No SessionScavenger set, using defaults
  9. -- ::27.389:INFO:osjs.session:main: Scavenging every 600000ms
  10. -- ::27.399:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@64f6106c{/,null,AVAILABLE}
  11. -- ::27.420:INFO:osjs.AbstractConnector:main: Started ServerConnector@10dba097{HTTP/1.1,[http/1.1]}{0.0.0.0:}
  12. -- ::27.422:INFO:osjs.Server:main: Started @1156ms
  13. ::27.423 INFO - Nodes should register to http://10.1.102.68:4444/grid/register/

2.启动分支节点(node):

  1. java -jar selenium-server-standalone-3.5..jar -role node -port
  1. java -jar selenium-server-standalone-3.5..jar -role node -port

启动成功,可见如下提示

  1. D:\selenium>java -jar selenium-server-standalone-3.5..jar -role node -port
  2. ::10.588 INFO - Selenium build info: version: '3.5.0', revision: '8def36e068'
  3. ::10.589 INFO - Launching a Selenium Grid node
  4. -- ::11.283:INFO::main: Logging initialized @941ms to org.seleniumhq.jetty9.util.log.StdErrLog
  5. ::11.328 INFO - Driver class not found: com.opera.core.systems.OperaDriver
  6. ::11.349 INFO - Driver provider class org.openqa.selenium.safari.SafariDriver registration is skipped:
  7. registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform VISTA
  8. ::11.372 INFO - Using the passthrough mode handler
  9. -- ::11.395:INFO:osjs.Server:main: jetty-9.4..v20170502
  10. -- ::11.418:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@6a28ffa4{/,null,STARTING} has uncovered
    http methods for path: /
  11. -- ::11.430:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@6a28ffa4{/,null,AVAILABLE}
  12. -- ::11.445:INFO:osjs.AbstractConnector:main: Started ServerConnector@7714e963{HTTP/1.1,[http/1.1]}{0.0.0.0:}
  13. -- ::11.460:INFO:osjs.Server:main: Started @1118ms
  14. ::11.460 INFO - Selenium Grid node is up and ready to register to the hub
  15. ::11.477 INFO - Starting auto registration thread. Will try to register every ms.
  16. ::11.477 INFO - Registering the node to the hub: http://localhost:4444/grid/register
  17. ::11.620 INFO - The node is registered to the hub and ready to use

通过主节点控制器可以看到连接到hub的所有node信息 http://127.0.0.1:4444/grid/console

3.通过Remote配置测试用例在节点上执行。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from selenium.webdriver import Remote
  5.  
  6. # 定义主机与浏览器
  7. lists = {
  8. 'http://127.0.0.1:5555/wd/hub': 'chrome',
  9. 'http://127.0.0.1:5556/wd/hub': 'firefox',
  10. }
  11.  
  12. # 通过不同的浏览器执行脚本
  13. for host, browser in lists.items():
  14. print(host, browser)
  15. driver = Remote(command_executor=host, desired_capabilities={
  16. 'platform': 'ANY',
  17. 'browserName': browser,
  18. 'version': '',
  19. 'javascriptEnabled': True
  20. })
  21.  
  22. driver.get("http://www.baidu.com")
  23. driver.find_element_by_id("kw").send_keys(browser)
  24. driver.find_element_by_id("su").click()

四、Selenium 调用远程Webdriver

上面启动的hub与node都是在同一台主机上,要想在其他主机上启动node,则必须满足以下要求:

  • 本地hub主机与远程node主机之间可以用ping命令连通
  • 远程主机必须按照用例执行的浏览器及驱动,并且驱动要放在环境变量path的目录下
  • 远程主机必须安装Java环境,因为需要运行Selenium Server

启动步骤:

1.启动本地hub主机(假设本机IP为:10.1.102.68)

  1. java -jar selenium-server-standalone-3.5..jar -role hub

2.启动远程node主机(假设IP地址为:10.1.102.75)

  1. java -jar selenium-server-standalone-3.5..jar -role node -port -hub http://10.1.102.68:4444/grid/register

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***

Selenium with Python 002 - 快速入门的更多相关文章

  1. Python pandas快速入门

    Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...

  2. Python 3 快速入门 1 —— 数据类型与变量

    本文假设你已经有一门面向对象编程语言基础,如Java等,且希望快速了解并使用Python语言.本文对重点语法和数据结构以及用法进行详细说明,同时对一些难以理解的点进行了图解,以便大家快速入门.一些较偏 ...

  3. Python 3 快速入门 2 —— 流程控制与函数

    本文假设你已经有一门面向对象编程语言基础,如Java等,且希望快速了解并使用Python语言.本文对重点语法和数据结构以及用法进行详细说明,同时对一些难以理解的点进行了图解,以便大家快速入门.一些较偏 ...

  4. Python 3 快速入门 3 —— 模块与类

    本文假设你已经有一门面向对象编程语言基础,如Java等,且希望快速了解并使用Python语言.本文对重点语法和数据结构以及用法进行详细说明,同时对一些难以理解的点进行了图解,以便大家快速入门.一些较偏 ...

  5. 转:Python requests 快速入门

    迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: ·Requests 已安装 ·Reques ...

  6. Python Requests快速入门

    迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: Requests 已安装 Requests ...

  7. 懂一点Python系列——快速入门

    本文面相有 一定编程基础 的朋友学习,所以略过了 环境安装.IDE 搭建 等一系列简单繁琐的事情. 一.Python 简介 Python 英文原意为 "蟒蛇",直到 1989 年荷 ...

  8. 第一阶段——CentOS6_Python3.6.1笔记(尚学堂-Python基础快速入门)+ 【补充】麦子-Python程序入门与进阶

    虚拟机环境: 设置网络 .修改网络地址 .设置网卡为nat模式 .确保物理机启动dhcp.net服务 .编辑文件:vim /etc/sysconfig/network-scripts/ifcfg-et ...

  9. 零起点PYTHON机器学习快速入门 PDF |网盘链接下载|

      点击此处进入下载地址 提取码:2wg3 资料简介: 本书采用独创的黑箱模式,MBA案例教学机制,结合一线实战案例,介绍Sklearn人工智能模块库和常用的机器学习算法.书中配备大量图表说明,没有枯 ...

随机推荐

  1. 轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 转载https://blog.csdn.net/whoamiyang/article/details/51901888 1. MVCC简介 1.1 什么是MVC ...

  2. Docker Libnetwork driver API

    以下内容均在libnetwork/driverapi目录下 Driver接口如下所示: // Driver is an interface that every plugin driver needs ...

  3. tensorflow 的 tutorial 的卷积神经网络的例子 convolutional.py

    具体的网址在这里: https://github.com/tensorflow/tensorflow/tree/r0.12/tensorflow/models 一个卷积神经网络用于股票分析的例子:  ...

  4. golang的多协程实践

    go语言以优异的并发特性而闻名,刚好手上有个小项目比较适合. 项目背景: 公司播控平台的数据存储包括MySQL和ElasticSearch(ES)两个部分,编辑.运营的数据首先保存在MySQL中,为了 ...

  5. sql查询原理和Select执行顺序

    一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图的 ...

  6. FTP pure-ftpd 安装、管理

    FTP简介 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为文传协议,用户Internet上的控制文件的双向传输. FTP的主要作用,就是让用户链接上一个远 ...

  7. 20145229吴姗珊《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145229吴姗珊<网络对抗>shellcode注入&Return-to-libc攻击深入(待上传) shellcode注入 shellcode是一段代码,是溢出程序和蠕虫病毒 ...

  8. Convolutional Neural Network

    Why CNN for Image 图片是由像素点组成的,可以这样来解释深度神经网络对图片的处理. 第一层的layer是最基本的分类器,区分一些基本的特征,比如颜色.是否有斜线. 第二层的layer会 ...

  9. Steema TeeChart Pro VCL FMX 2017.20 Full Suorce在Delphi XE10下的安装

    一.首先将压缩包TeeChart Pro VCL FMX 2017.20 FS.rar解压到一个目录,比如 E:\Application\Steema TeeChart Pro VCL FMX 201 ...

  10. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...