资讯专栏INFORMATION COLUMN

分享一个神器,Selenium 自动化测试工具

jimhs / 3347人阅读

摘要:安装的安装就不再科普,自行百度。运行这段代码,你会发现自动打开,并访问了百度,在输入框输入了,紧接着跳转到了搜索的结果页。

最近写项目的时候,用到了Selenium,一个 Web 端的自动化测试工具,直接运行在浏览器中,用来模拟用户操作。

Selenium 不仅仅可以用作自动化测试,还有很多种玩法,比如 Python 的爬虫,实现某商品的秒杀,甚至是页游外挂脚本,只要是基于浏览器操作,只有你想不到,没有 Selenium 做不到,就是这么强大!

直奔主题,我们来感受一下 Selenium。

安装

Python 的安装就不再科普,自行百度。

通过 pip 命令安装 Selenium

pip install selenium
安装浏览器驱动

Selenium 支持的浏览器很多,Firefox、Chrome、IE、Opera 等等。

作为一个程序员,想必大多常用的浏览器都是 Chrome,我的电脑是 Mac,安装 Chrome 浏览器驱动,直接执行 brew cask install chromedriver 即可。

更多 Selenium 浏览器驱动下载,请点击。

示例

先来一段简单的代码。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.find_element_by_id("kw").send_keys("php")
browser.find_element_by_id("kw").send_keys(Keys.ENTER)

运行这段代码,你会发现自动打开 Chrome,并访问了百度,在输入框输入了 php,紧接着跳转到了搜索的结果页。

常用方法 1. 页面元素定位

Selenium 常用的元素定位方法

find_element_by_id()

find_element_by_class_name()

find_element_by_tag_name()

find_element_by_css_selector()

find_element_by_tag_name()

比如百度页面的 HTML:

我们可以这样定位

element = driver.find_element_by_id("kw")
element = driver.find_element_by_class_name("s_ipt")
element = driver.find_element_by_css_selector(".s_ipt")

获取元素之后,就是针对于元素的操作了,简单可以划分两类操作,鼠标事件和键盘事件等等。

2. 鼠标操作
element.click()  单击;
element.context_click() 右击;
element.double_click() 双击;
element.drag_and_drop() 拖动;
element.move_to_element() 鼠标悬停
3. 输入和键盘事件

输入文本:

element.send_keys("Hello world")

键盘操作:

element.send_keys(Keys.ENTER) 回车
element.send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
element.send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
element.send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) 
element.send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
element.send_keys(Keys.F1) 键盘 F1
…… 等等
窗口切换
driver.switch_to_window("windowName")
# 获取所有打开窗口句柄
all_handles = driver.window_handles

# 获取当前窗口句柄
current_windows = driver.current_window_handle
页面等待

现在很多项目都是前后端分离的,HTML 动态渲染,如果我们打开某页面,直接选取元素操作,就会抛出异常,所以设置页面等待是很有必要的。

等待分为两种类型:显式等待和隐式等待。

显式等待: 针对页面的某一元素,每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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

element = WebDriverWait(driver, 5, 0.5).until(
            EC.presence_of_element_located((By.ID, "kw"))
        )
element.send_keys("selenium")
driver.quit()

隐式等待: 并不针对页面上的某一元素进行等待,脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位,直到超出设置时长,抛出异常。

# 设置隐式等待为10秒
driver.implicitly_wait(10)

Selenium 还有更多的操作,比如设置浏览器 cookie、文件上传、窗口截图等待,这里就不多介绍了,有兴趣的话,大家可以去看扩展阅读。

女票再让我帮她秒杀商品,再也不用傻傻等待,分分钟用 Selenium 写个秒杀应用有木有!:)

扩展阅读

Selenium 教程

Selenium 官方 API

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44737.html

相关文章

  • Google推出的爬虫新神器:Pyppeteer,神挡杀神,佛挡杀佛!

    摘要:注意,是叫做,不是。两款浏览器同根同源,它们有着同样的,但配色不同,由蓝红绿黄四种颜色组成,而由不同深度的蓝色构成。另外是基于的新特性实现的,所以它的一些执行也支持异步操作,效率相对于来说也提高了。是否响应信号,一般是命令,默认是。 如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具,现在已经被广泛用于网络爬虫中来应对 ...

    Fundebug 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 透过源码看本质-关于Selenium Webdriver 实现原理的一点思考和分享

    摘要:最近针对这个问题看了不少了文章和书籍,在加上一点自己的思考和整理,与大家一起分享,一起学习。本文将以为例进行说明。这个值表示的是访问的。以为例可以看到,指令的部分包含了几个组成部分请求方法。这一部分用来表示具体的指令。 作为一名使用Selenium开发UI自动化多年的工程师,一直都对Selenium Webdriver的实现原理感觉不是很清楚。怎么就通过脚本控制浏览器进行各种操作了呢?...

    Loong_T 评论0 收藏0
  • 记一次还可以抢救一下的爬虫私活,求接盘!

    摘要:前言最近接了一个爬虫的私活,收益颇丰。项目需求一个类似百度文库的网站,要求给出获得文章,以形式保存下来。但是这次需要保存到这不难,难在要求格式不变。文章都是以许多标签组合在一起的。知情人请告知,感激不尽。 前言 最近接了一个爬虫的私活,收益颇丰。自认为对爬虫掌握的还算不错,爬过很多国内外网站,数据超过百万,应对过封IP、设验证码、假数据、强制登录等反爬虫手段。于是乎,我毫不犹豫的接下了...

    alanoddsoff 评论0 收藏0
  • 100天涨薪4k!从功能测试动化测试,我整理的超全学习指南!

    摘要:事实上,自动化测试是相对于手动的。减少人为的错误自动化测试是机器完成,不存在执行过程中人为的疏忽和错误,测试设计完全决定了测试的质量,可以降低减少人为造成的错误。而接口自动化测试,主要是对接口进行测试。 今年6月份,由于经济压力让我下定决心进阶自动化测试,已经24的我做了3年功能测试,坐标广...

    TwIStOy 评论0 收藏0

发表评论

0条评论

jimhs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<