`
xiao_hui
  • 浏览: 4319 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

assert_select的用法

阅读更多

API中有关assert_select这块读着有些呦口,于是给翻了出来:

 

assert_select(selector, equality?, message?)

 

assert_select(element, selector, equality?, message?)

此断言可以选择元素,进行一个或多个相等测试。

 

如果第一个参数为元素,则选择所有相匹配的元素:以此元素开始(包括此元素)以及它的所有深度优先子节点元素。

如果没有指定元素,并且assert_select也没有在assert_select块内被调用,调用assert_select时元素来自于响应的HTML。

当在assert_select块内被调用时,则以数组的形式将元素传递到块内。在块内调用assert_select,并且没有为它指定元素,则块内assert_select进行断言测试时使用的元素为assert_select块所选择的元素。数组中的每个元素可以分别被assert_select所使用。

如果响应中包含两个顺序列表(ol),而每个顺序列表又包含四个列表元素(li),那么:

 
assert_select "ol" do |elements|
    elements.each do |element|
      assert_select element, "li", 4
    end
  end

 

  测试,正如你想的那样:

 

assert_select "ol" do
    assert_select "li", 8
  end

 

选择器可以是CSS选择器表达式(或字符串),带替换值的表达式或者是HTML::Selector对象。

相等测试

 

相等测试可以是以下其中之一:

    *      true - 如果至少有一个元素被选择,那么此断言为真。
    *      false - 如果没有元素被选择,那么此断言为真。
    *      String/Regexp - 如果至少一个元素的文本值与此字符串或正则表达式相匹配,那么此断言为真。
    *      Integer - 如果被选择的元素的个数与这个整数相等,那么此断言为真。
    *      Range - 如果被选择的元素的个数符合这个排列,那么此断言为真。

如果没有指定相等测试,那么当至少有一个元素被选择时,此断言为真。

为了执行多个相等测试,可以使用带有以下键的哈希:

    *      :text - 加上条件以缩小被选择元素的范围,条件为元素内的文本(字符串或正则表达式)含有:text对应的值。
    *      :html - 加上条件以缩小被选择元素的范围,条件为元素内的HTML内容(字符串或正则表达式)含有:html对应的值。
    *      :count - 如果被选择元素的个数等于:count对应的值,那么些断言为真。
    *      :minimum - 如果被选择元素的个数至少等于:count对应的值,那么些断言为真。
    *      :maximum - 如果被选择元素的个数最多等于:count对应的值,那么些断言为真。

如果此方法调用时使用块,一旦所有相等测试执行完毕,所有匹配元素所组成的数组将被此方法调用。


示例:

 

  # 断定至少有一个form元素  
  assert_select "form"

  # Form元素包含四个input
  assert_select "form input", 4

  # 页面的title是"Welcome"
  assert_select "title", "Welcome"

  # 页面的title是"Welcome" 并且页面当中只有一个title元素   
  assert_select "title", {:count=>1, :text=>"Welcome"}, "Wrong title or more than one title element"

  # 页面不包含form元素
  assert_select "form", false, "This page must contain no forms"

  # 测试内容和样式
  assert_select "body div.header ul.menu"

  # 使用替代值
  assert_select "ol>li#?", /item-\d+/

  # form中的所有input元素都有name属性
  assert_select "form input" do
    assert_select "[name=?]", /.+/  # Not empty
  end


 

0
0
分享到:
评论

相关推荐

    槽-惊人的快速多生产商频道-Rust开发

    功能有界/无界队列没有不安全的代码简单的设计,很少的依赖关系,非常快速地编译异步支持的select-like接口(请参阅示例/select.rs)与std :: sync :: mpsc的功能奇偶用法用法要使用Flume,请放置f

    selenium方法

    22. assertValue(locator,pattern) 验证某个可输入元素是否被赋了某个值 23. selenium.close() 关闭浏览器。 24. contextMenu(locator)打开关联的菜单,与右键作用差不多,但是对弹出的菜单selenium没办法操作。 ...

    用于微控制器 的 Lua_C语言_代码_相关文件_下载

    embLua(包括完整的 Lua 5.3.4 内核)的目的是为 C/C++ 开发人员提供使用脚本功能扩展其微控制器/嵌入式设备的可能性。embLua 的主要重点是在自定义项目和新平台中的...更多详情、使用方法,请下载后阅读README.md文件

    ZendFramework中文文档

    2.3.2. 使用声明(Assert)来编写条件性的 ACL 规则 3. Zend_Auth 3.1. 简介 3.1.1. 适配器 3.1.2. 结果 3.1.3. 身份的持久(Persistence) 3.1.3.1. 在PHP Session 中的缺省持久(Persistence) 3.1.3.2. 实现...

    selenium怎样在多窗口中运行程序 (1)

    23.select,selectFrame,selectWindow,selectPopUp,这几个功能的用法,以及在什么时候用? select用来操作下拉框。语法:select(selectLocator,optionLocator) ,例:select id=person_person_type,lable=非户籍人口...

    sqlalchemy-multiple-db

    使用pip安装: $ pip install sqlalchemy-multiple-db基本用法from sqlalchemy_multiple_db import DBConfig , dbdb . setup ({ "test1" : DBConfig ( dsn = "sqlite://" ), "test2" : DBConfig ( dsn = "sqlite://...

    C#中怎么将一个List转换为只读的

    如题,主要使用AsReadOnly这个方法就可以了 代码如下:List<int> a = new List<int> {1, 2, 3, 4, 5}; IList<int> b = a.AsReadOnly(); // block modification… IList<int> c = b.AsWritable(); // … but unblock...

    C++MFC教程

    |------ 4.F 关于WM_NOTIFY的使用方法 +-- 第五章 对话框 |------ 5.1 使用资源编辑器编辑对话框 |------ 5.2 创建有模式对话框 |------ 5.3 创建无模式对话框 |------ 5.4 在对话框中进行消息映射 |------ 5.5 在...

    foof:一种小的Lisp方言,可作为我测试语言功能的试验床

    FOOF 二氟化二氧-一种高React性,破坏性和危险性化合物,没有明显的应用。 FOOF在几乎任何React时都会发出声音。 FOOF是一个小的Lisp方言,可作为我测试语言功能的... , select并notify-whenever ), 有关某些用法示

    linq:C ++使用的linq

    林克 为C ++提供了linq的实现。目前它只支持C ++ Object数据源。 获取linq的实现代码: 演示示例 std::vector< int> v = { 4 , 5 , 6 , 1 , 2 , 3 , 7 , 8 , 9 };...assert ( std::equal( v2.begin(), v2.end(),

    java面试题

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。在很多情况下采用异步往往更有效率。 数据库三大范式? 答:1:确保每列都是不可分割的原子值 2...

    Linux高级bash编程

    为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash变量是...

    Advanced Bash-Scripting Guide <>

    1. 为什么使用shell 编程 2. 带着一个Sha-Bang 出发(Sha-Bang 指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash 变量是不分...

    Access+2000中文版高级编程

    2.4 使用属性和方法 35 2.4.1 使用现有的属性 35 2.4.2 使用现有的方法 38 2.4.3 使用命名参数 38 2.4.4 将对象赋值给变量 39 2.5 使用集合 41 2.5.1 计算元素的数量 42 2.5.2 访问集合元素 42 ...

    Access 2000中文版高级编程(part1)

    2.4 使用属性和方法 35 2.4.1 使用现有的属性 35 2.4.2 使用现有的方法 38 2.4.3 使用命名参数 38 2.4.4 将对象赋值给变量 39 2.5 使用集合 41 2.5.1 计算元素的数量 42 2.5.2 访问集合元素 42 2.5.3 对集合...

    JdbcTemplateTool.zip

    Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...

    c++ 面试题 总结

    assert(NULL != p); sscanf(p, "%s%d", str, n); if (0 == strcmp(str, "something")) { ... } } A: sscanf(p, "%s%d", str, n); 这句该写成: sscanf(p, "%s%d", str, &n); ------------------------------...

Global site tag (gtag.js) - Google Analytics