210705学习笔记(cucumber@ruby)
目录
- July 5
- 环境安装:
- 计算器
- July 6
- Friday
- 访问网页
- 模仿登录
- July 7
- 改成读取数据表 Scenario Outline
- July 8
- Watir
- Ferrum
- Capybara
July 5
——————————————————————————————————
环境安装:
参考文章
踩坑:ide安了ruby插件也不能建ruby文件,找不到SDK,于是安了个windows visual code,结果这玩意一run就报错,最后被迫用terminal终端ruby xxx.rb执行
反正是搞好了,不想太耽误时间在这上面,回头玩利索了再换工具
原来ruby的sdk就是ruby.exe,转战idea了
先gem一波环境
gem install json
gem install httparty
gem install cucumber
gem install rspec
gem install watir-webdriver
gem install selenium-client
gem install websocket
windows下加颜色:word/ansi/x64
ansicon -i 安装(没有反馈)
cucumber初始化和测试项目初始化
运行单个
rule.feature
# features/rule.featureFeature: Rule SampleRule: This is a ruleExample: A passing exampleGiven this will passWhen I do an actionThen some results should be thereExample: A failing exampleGiven this will failWhen I do an actionThen some results should be there
运行命令
cucumber rule.feature
保存html测试结果
cucumber --format summary --format html --out report.html
一直提示没有功能undefined
研究好久,原来是因为cucumber没找到step文件,要手动指定一下路径
cucumber -r features/step_definitions/ features/printer.feature
然后报了定义重复ambiguous match of
删掉一个匹配就行
然后报了匹配必须是正则表达式或字符串,改
Expression must be a String or Regexp (ArgumentError)
终于pass了
计算器
参考
Calculator.rb
class Calculatordef push(n) #记数@args ||= [] #初始化空数组@args << nenddef sum() #返回全部数字和sum = 0@args.each do |i|sum += iend@result = sumreturn sumenddef result@resultend
end
踩坑:
sum没有参数,括号删不删都行,也就是个warning
cal.feature
Feature: AdditionScenario: Add two numbersGiven i have a calculatorAnd i have entered 50 into the calculatorAnd i have entered 70 into the calculatorWhen i press addThen the result should be 120 on the screen
cal.rb
Given /^i have a calculator$/ do@c = Calculator.new
endWhen /^i have entered (\d+) into the calculator$/ do |num|puts "num:#{num}"@c.push(num.to_i)
endWhen /^i press add$/ doputs "sum:#{@c.sum()}"endThen /^the result should be (\d+) on the screen$/ do |result|#raise "expect"+result+"in fact"+sum@c.result.should == result.to_i
end
一开始给的是
Given /^我有一个计算器$/ do@c = Calculator.new
endGiven /^我向计算器输入(\d+)$/ do |num|@c.push(num.to_i)
endWhen /^我点击累加$/ do@c.sum
endThen /^我应该看到结果(\d+)$/ do |result|@c.result.should == result.to_i
end
所以只是因为sum后面少了方法的括号所以一直过不去
全修好跑通了
把Calculator.rb里sum+=i的加号去了再测
July 6
——————————————————————————————————
Friday
rb
Given /Today is (\w+)/ do |str|@str=str
endWhen /I ask if its Friday/ doif @str=='Friday' then@result="yes"else @result='no'end
endThen /I should be told (\w+)/ do |res|@result.should==res
end
feature
Feature:Another testScenario: not FridayGiven Today is SundayWhen I ask if its FridayThen I should be told noScenario: is FridayGiven Today is FridayWhen I ask if its FridayThen I should be told yes
idea的不知道为啥有问题就是跑不通中文测试
换到git就好了
访问网页
require 'watir'
ie = Watir::Browser.new
ie.goto 'www.baidu.com'
遇到问题如下:
Browser默认启动的是chrome,如果要启动其他的浏览器
ie = Watir::Browser.new :chrome
new后面有个空格(很重要)
ruby hao.rb报错
in `binary_path': Unable to find chromedriver. Pl
ease download the server from (Selenium::WebDriver::Error::WebDriverError)
https://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
是因为缺少相应driver文件,去后面那个网址下一个(一定要跟浏览器版本对应不然还会报错,win32版和win64版兼容所以没有win64版本),解压后放到ruby/bin下面
ruby访问百度并搜索
require 'watir'
require 'rubygems'ie = Watir::Browser.new
ie.goto 'www.baidu.com'
ie.text_field(:id => 'kw').set "test"
ie.button(:id => "su").click
sleep 3
ie.quit
require丢到env.rb里
做了个feature
#language:zh-CN
功能:百度测试场景:点击搜索假如我打开百度当我搜索abc那么我应该得到搜索结果
配套step
Given /我打开百度/ do@ie = Watir::Browser.new :chrome@ie.goto 'www.baidu.com'
endWhen /我搜索(.*)/ do |str|@str = str@ie.text_field(:id => 'kw').set @str@ie.button(:id => "su").click
endThen /我应该得到搜索结果/ do#@ie.text.should include(text)sleep 5
end
结果:三个pass,打开页面看一眼关了
把@ie封装进对象
page.rb
class Pagedef initialize@ie = Watir::Browser.new@ie.goto 'www.baidu.com'end
def search str@ie.text_field(:id => 'kw').set "test"@ie.button(:id => "su").clickend
def has_text text#@id.text.should include(text)sleep 5end
end
修改step
#encoding:utf-8
require File.join("d:\\work\\rubycode\\code\\",'page.rb')Given /我打开百度/ do@page=Page.new
endWhen /我搜索(.*)/ do |str|@str = str@page.search @str
endThen /我应该得到搜索结果/ do@page.has_text @strsleep 5
end
模仿登录
feature
#language:zh-CN
功能:登录管理场景:登录成功假如我打开登录网页假如用户名是tomsmith并且密码是SuperSecretPassword!那么返回是成功场景:登录成功假如我打开登录网页假如用户名是foobar并且密码是barfoo那么返回是失败
step
Given /我打开登录网页/ do@Login=Login.new
endGiven /用户名是(.*)/ do |username|@username=username@Login.input_id @username#@Login.text_field(:id => 'username').set @username
endGiven /密码是(.*)/ do |password|@password = password@Login.input_pw @password
endThen /返回是(.*)/ do |tips|@tips=tipsif @tips == "成功" then@Login.is_correct "true"else@Login.is_correct "false"endend
Login类
class Login
def initialize@ie = Watir::Browser.new@ie.goto 'https://the-internet.herokuapp.com/login'
end
def input_id str@ie.text_field(:id => 'username').set str
end
def input_pw str@ie.text_field(:id => 'password').set str@ie.button(:class => "radius").click
end
def is_correct str@result=str#if @ie.div(:id => 'flash').text == str then@tip = @ie.div(:id => 'flash').textif @result == "true" thenif @tip == "You logged into a secure area!
×" thenputs "correct&success"else puts "correct but failure"endelse if @tip == "Your username is invalid!
×" thenputs "wrong&success"elseputs "wrong but failure"endendend
end
运行
cucumber -r features/step_definitions/ features/login.feature
July 7
————————————————————————————————————————————————
改成读取数据表 Scenario Outline
feature
Feature: table testScenario Outline: testWhen I log in the websiteWhen I read the username <username>When I read the password <password>When I read the message <message>Then I got the result <result>Examples:| username | password | message |result|| tomsmith | SuperSecretPassword! | You logged into a secure area! |success|| foobar | barfoo | Your username is invalid! |failure|
踩过的坑
场景后面有Outline不然不认例子
例子是Examples
读表变量要加<>
在feature中,将前面Scenario改为了Scenario Outline,表示会有表格参数,参数使用<>来进行标注,在用例结束后Examples关键字中写入参数的具体值。
step
When /I log in the website/ do@Login=Login.new
endWhen /I read the username (.*)/ do |username|@username=username@Login.input_id @username
endWhen /I read the password (.*)/ do |password|@password=password@Login.input_pw @passwordendWhen /I read the message (.*)/ do |message|@message=message
endThen /I got the result (.*)/ do |result|@result=resultif @result == "success" then@Login.is_correct "true"else@Login.is_correct "false"endend
继续调用login类
July 8
————————————————————————
水厂测试
Water类
class WaterLogindef initialize@ie = Watir::Browser.new@ie.goto '水厂网址'@ie.window.maximizeenddef temp@ie.goto'水厂网址'enddef input_id str@ie.text_field(:placeholder => '请输入用户名').set str
enddef input_pw str@ie.text_field(:placeholder => '请输入密码').set str@ie.button(:type => "button").clickend
def click_the_icon@ie.span(:class => 'tool-list large').i(:title => '业务系统').click#@ie.image(:title => '业务系统',:index => 0).click#@ie.i(:class => 'iconfont iconxiangmuguanlix1',:text => '项目管理').click@ie.div(:class => "happy-scroll-content").ul().li(:index => 18).a().click
enddef input_projectname strsleep 1@ie.iframe(:src => '/projectManage/basicInfo').text_field(:class => 'ivu-input ivu-input-default',:index => 0).set strenddef input_projectadd strputs str@ie.iframe(:src => '/projectManage/basicInfo').text_field(:class => 'ivu-input ivu-input-default',:index => 4).set strenddef input_projectapa strputs str@ie.iframe(:src => '/projectManage/basicInfo').text_field(:class => 'ivu-input ivu-input-default',:index => 1).set strenddef submit@ie.iframe(:src => '/projectManage/basicInfo').button(:type => 'button',:class => 'ivu-btn ivu-btn-primary').clickenddef close@ie.window.closeend
end
feature
Feature: Water ProjectScenario Outline: User LoginWhen I login the waterGiven my username is 账号Given my password is 密码When click the iconThen set projectname <projectname>Then set projectadd <projectadd>Then set projectapa <projectapa>Then I submitThen I see the new dataExamples:| projectname | projectadd | projectapa || 项目1 | 北京 | 数字部 || 项目2 | 辽宁 | 事业部 |
step
When /I login the water/ do@Login=WaterLogin.new
endGiven /my username is (.*)/ do |username|@username=username@Login.input_id @username
endGiven /my password is (.*)/ do |password|@password=password@Login.input_pw @password
endWhen /click the icon/ dosleep 1@Login.click_the_icon#@Login.temp
endThen /set projectname (.*)/ do |projectname|@projectname=projectname@Login.input_projectname @projectname
endThen /set projectadd (.*)/ do |projectadd|@projectadd=projectadd@Login.input_projectadd @projectaddendThen /set projectapa (.*)/ do |projectapa|@projectapa=projectapa@Login.input_projectapa @projectapa
endThen /I submit/ do@Login.submit
end
Then /I see the new data/ do@Login.tempsleep 5#看看效果@Login.close
end
踩过的坑
iframe处理
这是个嵌套在iframe里的页面,提取里面的内容要先iframe进去
对浏览器的操作都在window里,如window.close,window.maximize
Watir
Watir是近期比较流行的由Ruby构建的自动化测试框架,它的全称是Web Application Testing in Ruby。与其他的商业工具相比Watir不但灵活小巧,而且功能也十分强大。Watir是基于Ruby这种面向对象的脚本语言的,它用的是一种纯粹的编程语言,并且它是一个开源的产品,同时它还允许对网页上的对象的直接操作,例如html和JavaScript 。不过Watir仅仅是对IE进行控制的,如果想要操控其他的浏览器例如Firefox或Safari就需要安装相应的Watir库,参考这里。总之,Watir是一个面向浏览器来开发和运行的一个自动化测试工具。
cucumber -r features/step_definitions/ features/water_cn.feature
Ferrum
GitHub - rubycdp/ferrum: Headless Chrome Ruby API
Ruby语言的实现的测试工具,支持有头和无头模式,支持多种测试方法
cucumber -r step_definitions/ features/furrum_water.feature
Capybara
GitHub - teamcapybara/capybara: Acceptance test framework for web applications
通过模拟真实用户与浏览器进行互动,无需设置,不必手动等待中间过程完成
cucumber -r step_definitions/ features/capybara_water.feature
find的智能寻找元素很好用
210705学习笔记(cucumber@ruby)相关推荐
- Ruby学习笔记_索引贴
学习Ruby也有段时间了,在学习的同时也做了些笔记并发到了园子睐.看到园子里的大虾们在出了一系列文章后都会做个索引贴,这样很方便,所以本人今天抽了个空就把它整理了下,方便自己的同时也方便感兴趣的朋友. ...
- ruby学习笔记(11)--symbol与hash参数
symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001&qu ...
- Nancy in .Net Core学习笔记 - 初识Nancy
原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...
- CUBRID学习笔记 1 简介 cubrid教程
CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...
- CUBRID学习笔记 3 net连接数据库并使用cubrid教程示例
接上文 数据库安装好后,也可以测试语句了. 下面我们用c#写一个控制台程序,连接数据库,并读取数据. 一 下载驱动 net版的下 CUBRID ADO.NET Data Provider 9.3.0 ...
- 学习笔记(三)——CSS进阶
在网页的布局和页面元素的表现方面,要掌握的最重要的概念是css的盒子模型(BoxModel)以及盒子在浏览器中的排列(定位),这此概念用来控制元素在页面上的排列和显示方式,形成CSS的基本布局. 文章 ...
- 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...
- Python学习笔记 (1)Hello World(环境搭建+输出Hello World!)...
随想 高考发挥失常.科三遇火车发挥失常,各种不顺--突然发现假期都快没了,才想起高考前想象的这个假期要做的一堆事,现在来多完成一件吧. 这几篇博客仅只是我的学习笔记,凑合看吧.我这个python小白看 ...
- Python学习笔记:常用内建模块7XML
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- 取得 Git 仓库 —— Git 学习笔记 04
取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...
最新文章
- 【深度学习入门到精通系列】使用Plotly绘制气泡图(以U-Net等网络性能比较为例)
- SQL Server 数据库表的统计信息的更新
- 【后缀自动机】SPOJ 1812-LCSII
- 1-1-2 交叉编译工具链
- 深度学习Deep learning From Image to Sequence
- Java开发小技巧(六):使用Apache POI读取Excel
- python有趣的工具_python好玩的小工具(正在create中)
- UI2Code智能生成Flutter代码--整体设计篇
- SwaggerUI看烦了,IGeekFan.AspNetCore.Knife4jUI 帮你换个新皮肤
- 【POJ - 2762】Going from u to v or from v to u?(Tarjan缩点,树形dp 或 拓扑排序,欧拉图相关)
- Day Two(Beta)
- java的servlet是干嘛的_Servlet能够做什么?
- 你给我这么多报表,让我如何是好
- solrCloud相关的管理命令
- 世界顶级黑市拳赛内幕
- 学习记录:xmind2testcase测试用例模板
- 互联网日报 | 5月26日 星期三 | 华为鸿蒙操作系统6月2日发布;特斯拉已在中国建立数据中心;百度发起“高考+”计划...
- 响应式布局基础知识详解
- 2019区块链技术与应用创新峰会,UCK Network聚力技术创新 引领未来发展
- web网页设计实例作业 ——中国风文化传媒企业官网(6页) 简单个人网页设计作业 静态HTML文化主题网页作业
热门文章
- centos安装git时出错提示make[1]: *** [perl.mak] Error 2 make: *** [perl/perl.mak] Error 2
- 一元三次方程求解(二分法)
- kali如何对网站进行ddos攻击
- Matlab中pickic_高颜值甜品DIY |春季甜品Picnic野餐系列,一起过个惬意慵懒的午后时光❗️...
- 【Python3.6爬虫学习记录】(八)Selenium模拟登录新浪邮箱并发送邮件
- Andriod Studio 安装过程
- google thumbnailator简介
- flask怎么创建虚拟环境_在Windows OS中创建虚拟环境并在本地运行Flask应用程序
- Ubuntu下载常用软件和使用Caffe时的常见问题
- 川普上台,VR游戏开发者也来恶搞蹭热度