目录

  • 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)相关推荐

  1. Ruby学习笔记_索引贴

    学习Ruby也有段时间了,在学习的同时也做了些笔记并发到了园子睐.看到园子里的大虾们在出了一系列文章后都会做个索引贴,这样很方便,所以本人今天抽了个空就把它整理了下,方便自己的同时也方便感兴趣的朋友. ...

  2. ruby学习笔记(11)--symbol与hash参数

    symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001&qu ...

  3. Nancy in .Net Core学习笔记 - 初识Nancy

    原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...

  4. CUBRID学习笔记 1 简介 cubrid教程

    CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...

  5. CUBRID学习笔记 3 net连接数据库并使用cubrid教程示例

    接上文 数据库安装好后,也可以测试语句了. 下面我们用c#写一个控制台程序,连接数据库,并读取数据. 一 下载驱动  net版的下 CUBRID ADO.NET Data Provider 9.3.0 ...

  6. 学习笔记(三)——CSS进阶

    在网页的布局和页面元素的表现方面,要掌握的最重要的概念是css的盒子模型(BoxModel)以及盒子在浏览器中的排列(定位),这此概念用来控制元素在页面上的排列和显示方式,形成CSS的基本布局. 文章 ...

  7. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记

    转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...

  8. Python学习笔记 (1)Hello World(环境搭建+输出Hello World!)...

    随想 高考发挥失常.科三遇火车发挥失常,各种不顺--突然发现假期都快没了,才想起高考前想象的这个假期要做的一堆事,现在来多完成一件吧. 这几篇博客仅只是我的学习笔记,凑合看吧.我这个python小白看 ...

  9. Python学习笔记:常用内建模块7XML

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. 取得 Git 仓库 —— Git 学习笔记 04

    取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...

最新文章

  1. 【深度学习入门到精通系列】使用Plotly绘制气泡图(以U-Net等网络性能比较为例)
  2. SQL Server 数据库表的统计信息的更新
  3. 【后缀自动机】SPOJ 1812-LCSII
  4. 1-1-2 交叉编译工具链
  5. 深度学习Deep learning From Image to Sequence
  6. Java开发小技巧(六):使用Apache POI读取Excel
  7. python有趣的工具_python好玩的小工具(正在create中)
  8. UI2Code智能生成Flutter代码--整体设计篇
  9. SwaggerUI看烦了,IGeekFan.AspNetCore.Knife4jUI 帮你换个新皮肤
  10. 【POJ - 2762】Going from u to v or from v to u?(Tarjan缩点,树形dp 或 拓扑排序,欧拉图相关)
  11. Day Two(Beta)
  12. java的servlet是干嘛的_Servlet能够做什么?
  13. 你给我这么多报表,让我如何是好
  14. solrCloud相关的管理命令
  15. 世界顶级黑市拳赛内幕
  16. 学习记录:xmind2testcase测试用例模板
  17. 互联网日报 | 5月26日 星期三 | 华为鸿蒙操作系统6月2日发布;特斯拉已在中国建立数据中心;百度发起“高考+”计划...
  18. 响应式布局基础知识详解
  19. 2019区块链技术与应用创新峰会,UCK Network聚力技术创新 引领未来发展
  20. web网页设计实例作业 ——中国风文化传媒企业官网(6页) 简单个人网页设计作业 静态HTML文化主题网页作业

热门文章

  1. centos安装git时出错提示make[1]: *** [perl.mak] Error 2 make: *** [perl/perl.mak] Error 2
  2. 一元三次方程求解(二分法)
  3. kali如何对网站进行ddos攻击
  4. Matlab中pickic_高颜值甜品DIY |春季甜品Picnic野餐系列,一起过个惬意慵懒的午后时光❗️...
  5. 【Python3.6爬虫学习记录】(八)Selenium模拟登录新浪邮箱并发送邮件
  6. Andriod Studio 安装过程
  7. google thumbnailator简介
  8. flask怎么创建虚拟环境_在Windows OS中创建虚拟环境并在本地运行Flask应用程序
  9. Ubuntu下载常用软件和使用Caffe时的常见问题
  10. 川普上台,VR游戏开发者也来恶搞蹭热度