`
lilingjay
  • 浏览: 8532 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Brain storming a method of validating a HTML table's content with Watir-webdrive

 
阅读更多

Question:

 

 

I am trying to work out a method to check the content of an HTML table with Watir-webdriver. Basically I want to validate the table contents against a saved valid table (CSV file) and they are the same after a refresh or redraw action.

Ideas I've come up with so far are to:

  • Grab the table HTML and compare that as a string with the baseline value.
  • Iterate through each cell and compare the HTML or text content.
  • Generate a 2D array representation on the table contents and do an array compare.

What would be the fastest/best approach? Do you have insights on how you handled a similar problem?

Here is an example of the table:

<table id="attr-table">
<thead>
<tr><th id="attr-action-col"><input type="checkbox" id="attr-action-col_box" class="attr-action-box" value=""></th><th id="attr-scope-col"></th><th id="attr-workflow-col">Status</th><th id="attr-type-col"></th><th id="attr-name-col">Name<span class="ui-icon ui-icon-triangle-1-n"></span></th><th id="attr-value-col">Francais Value</th></tr></thead>
<tbody>
<tr id="attr-row-209"><td id="attr_action_209" class="attr-action-col"><input type="checkbox" id="attr_action_209_box" class="attr-action-box" value=""></td><td id="attr_scope_209" class="attr-scope-col"><a href="#" class="ws-invoke-editor" id="attr_scope_209_a"><img src="images/attrib_bullet_global.png" title="global"></a></td><td id="attr_workflow_209" class="attr-workflow-col"></td><td id="attr_type_209" class="attr-type-col"><a href="#" class="ws-invoke-editor" id="attr_type_209_a"><img src="images/attrib_text.png"></a></td><td id="attr_name_209" class="attr-name-col"><a href="#" class="ws-invoke-editor" id="attr_name_209_a">Name of: Catalogue</a></td><td id="attr_value_209" class="attr-value-col"><a href="#" class="ws-invoke-editor lang_10" id="attr_value_209_a"><p class="acms ws-editable-content lang_10">2010 EI-176</p></a></td></tr>
<tr id="attr-row-316"><td id="attr_action_316" class="attr-action-col"><input type="checkbox" id="attr_action_316_box" class="attr-action-box" value=""></td><td id="attr_scope_316" class="attr-scope-col"><a href="#" class="ws-invoke-editor" id="attr_scope_316_a"><img src="images/attrib_bullet_global.png" title="global"></a></td><td id="attr_workflow_316" class="attr-workflow-col"></td><td id="attr_type_316" class="attr-type-col"><a href="#" class="ws-invoke-editor" id="attr_type_316_a"><img src="images/attrib_text.png"></a></td><td id="attr_name_316" class="attr-name-col"><a href="#" class="ws-invoke-editor" id="attr_name_316_a">_[Key] Media key</a></td><td id="attr_value_316" class="attr-value-col"><a href="#" class="ws-invoke-editor lang_10" id="attr_value_316_a"><p class="acms ws-editable-content lang_10"><span class="acms acms-choice" contenteditable="false" id="568">163</span></p></a></td></tr>
<tr id="attr-row-392"><td id="attr_action_392" class="attr-action-col"><input type="checkbox" id="attr_action_392_box" class="attr-action-box" value=""></td><td id="attr_scope_392" class="attr-scope-col"><a href="#" class="ws-invoke-editor" id="attr_scope_392_a"><img src="images/attrib_bullet_global.png" title="global"></a></td><td id="attr_workflow_392" class="attr-workflow-col"></td><td id="attr_type_392" class="attr-type-col"><a href="#" class="ws-invoke-editor" id="attr_type_392_a"><img src="images/attrib_numeric.png"></a></td><td id="attr_name_392" class="attr-name-col"><a href="#" class="ws-invoke-editor" id="attr_name_392_a">_[Key] Numéro d'ordre</a></td><td id="attr_value_392" class="attr-value-col"><a href="#" class="ws-invoke-editor lang_10" id="attr_value_392_a"><p class="acms ws-editable-content lang_10">2</p></a></td></tr>
</tbody>
</table>

Answers
1:ust one idea I came up with. I used Hash and Class object instead of 2D array.

foo.csv

209,global,text.Catalogue,2010 EI-176
392,global,numeric,Numéro d'ordre,2

require 'csv'
expected_datas = CSV.readlines('foo.csv').map do |row|
  {
    :id => row[0],
    :scope => row[1],
    :type => row[2],
    :name => row[3],
    :value => row[4]
  }
end

class Data
  attr_reader :id,:scope,:type,:name,:value
  def initialize(tr)
    id = tr.id.slice(/attr-row-([0-9]+)/,1)
    scope = tr.td(:id,/scope/).img.src.slice(/attr_bullet_(.+?).png/,1)
    type = tr.td(:id,/type/).img.src.slice(/attrib_(.+?).png/,1)
    name = tr.td(:id,/name/).text
    value = tr.td(:id,/value/).text
  end
end

browser = Watir::Browser.new
browser.goto 'foobar'
datas = browser.table(:id,'attr-table').tbody.trs.map{|tr| Data.new(tr)}

datas.zip(expected_datas).each do |data,expected_data|
  Data.instance_methods(false).each do |method|
    data.send(method).should == expected_data[method.to_sym]
  end
end

# something action (refresh or redraw action)
browser.refresh

after_datas = browser.table(:id,'attr-table').tbody.trs.map{|tr| Data.new(tr)}

datas.zip(after_datas).each do |data,after_data|
  Data.instance_methods(false).each do |method|
    data.send(method).should == after_data.send(method)
  end
end

2:

You could go for exact match

before_htmltable <=> after_htmltable

Or you could strip whitespace

before_htmltable.gsub(/\s+/, ' ') <=> after_htmltable.gsub(/\s+/, ' ')

I would think that creating the array then comparing each element would be more expensive.

Dave

分享到:
评论

相关推荐

    BRAIN STORMING头脑风暴法运用实务.ppt

    头脑风暴法,又称 Brain Storming,是一种广泛应用在企业管理中的创新思维和决策支持工具,尤其在产品开发、革新、战略规划等领域。这种方法的核心在于鼓励团队成员自由地表达想法,旨在激发大量的创新观点,从而...

    EMS内训07 QCC品管圈培训Brain Storming.pptx

    在QCC活动中,头脑风暴法(Brain Storming)被广泛应用,作为一种激发创新思维和集体智慧的方法。 头脑风暴法的核心在于鼓励参与者在无压力的环境中自由表达想法,无论这些想法是否传统或者离奇。这种方法分为两种...

    EventStorming

    ### EventStorming:一种高效的复杂领域学习方法 #### 一、引言 在现代软件开发过程中,特别是涉及大型互联分布式系统以及与遗留系统集成时,理解业务领域本身的复杂性成为了项目成功的关键因素之一。面对这样的...

    introducing_eventstorming.pdf

    事件风暴(Event Storming)是一种集体学习和工作坊式的建模技术,由Alberto Brandolini发明,旨在帮助团队理解和设计复杂业务系统。事件风暴的核心概念在于“通过行动来学习”,强调团队成员之间的协作和沟通。通过...

    Lean Publishing Software Architecture for Developers(2014).rar

    Software Architecture for Developers is a practical and pragmatic guide to modern software architecture, specifically aimed at software developers....How to identify risks with risk-storming.

    Event Storming PPT 事件风暴

    COLLABORATIVE LEARNING FOR COMPLEX DOMAINS EventStorming is a workshop format for quickly exploring complex business domains.

    学生信息管理系统 图形用户界面(GUI) java 实现对数据库的操作 数据库用的mysql_hurricane&&storming的博客-CSDN博客_学生信息管理系统界面.html

    学生信息管理系统 图形用户界面(GUI) java 实现对数据库的操作 数据库用的mysql_hurricane&&storming的博客-CSDN博客_学生信息管理系统界面.html

    eventstorming-glossary-cheat-sheet

    EventStorming词汇表和备忘单 EventStorming是超越孤岛边界进行协作的最明智的方法。 EventStorming的强大功能来自一个多元化,多学科的群体,他们在一起拥有很多智慧和知识。 虽然最初是为为领域驱动的设计聚合建模...

    awesome-eventstorming:很棒的事件存储

    EventStorming是一种基于研讨会的方法,可以快速找出软件程序领域中正在发生的事情。[1] 与其他方法相比,它非常轻巧,并且不需要计算机的有意支持。 结果以宽墙的粘滞便笺表示。 业务流程被“冲出”为一系列域事件...

    Can't Get To Performing Without Storming (pat-ma03)-计算机科学

    P M : M A R C H - A P R I L 2 0 0 3Patnode is a Professor of Program Management and Leadership at the Defense Acquisition University, Fort Belvoir, Va.T E A M D E V E L O P M E N T M O D E LCan't Get ...

    Dataland Web Log Storming v3.4 Build705

    《Dataland Web Log Storming v3.4 Build705:深度剖析Web服务器日志分析工具》 在IT行业中,对于网站性能监控与优化,Web服务器日志分析扮演着至关重要的角色。Dataland Web Log Storming v3.4 Build705是一款专为...

    创新思维-Crepiad(中文).pptx

    其中,头脑风暴分为团队活跃时的Brain Storming和氛围较静的Brain Writing,两者各有侧重,前者强调气氛的活跃,后者更注重真诚的思考。 例如,在面对2008年北京奥运会商机时,可以进行头脑风暴预测热销产品,如...

    event-storming-cheatsheet:用于准备和促进事件风暴研讨会的简短备忘单

    本备忘单旨在为准备和推动Event Storming Workshop提供简短的总结。 它不打算对该主题进行完整的介绍,需要有关 DDD 和事件风暴的先验知识才能负责任地使用本文档。所需材料纸卷来创建造型表面。 可在宜家 (Mala, ...

    PEP小学英语三年级下册UnitALetstalkPPT课件.pptx

    首先,课件采用“头脑风暴”(Brain storming)的方式引入主题,通过展示猴子、书等图片,引导学生用英语描述数量,如"I see one"或"I see ten",训练他们用英语表达数字的能力。 在课程中,教师会展示生日蛋糕的...

    怎样培养创新思维方法.ppt

    通过 Brain Storming 和 Brain Writing,可以挖掘出多样化的产品创意,如纪念品、实用商品等。 【强制联想法】通过列举主题相关的特性、缺点或建议,引导思考,产生改进或创新的点子。例如,将不同的汉字进行组合,...

    EMS内训07QCC品管圈培训BrainStorming.pptx

    【EMS内训07QCC品管圈培训BrainStorming.pptx】是关于QCC品管圈的培训材料,其中详细介绍了如何运用Brain Storming(头脑风暴法)这一技术来提升团队创新和问题解决能力。QCC品管圈是一种质量管理工具,由品质保证部...

    EventStormingWorkShop:EventStorming工作坊,这是一个动手工作坊。 包含以下主题:DDD,事件风暴,示例规范。 包括AWS产品:无服务器Lambda,DynamoDB,Fargate,CloudWatch

    使用通过Event Storming提供的域驱动设计方法,它可以帮助减少项目团队中每个人理解业务域模型所花费的时间。 理论与实践:现实世界中的学习案例 经历所有学习过程,在AWS上开发-&gt;构建-&gt;部署工件 目录 事件风暴 ...

    创新思维方法专题培训.pptx

    例如,面对特定的商业挑战,如2008年北京奥运会的商机,或者寻找Ball Pen的新用途,我们可以运用Brain Storming或Brain Writing等方法,让团队成员分别或集体提出各种可能的想法,甚至通过组合汉字来激发创新思维。...

    Unit7what’sthematter.ppt

    "Brain storming feelings"环节鼓励孩子们进行头脑风暴,列出更多关于感觉的词汇,比如"tired"和"ill",这样有助于扩展他们的词汇库。 "Look and say"和"Act and guess"活动则通过观察和表演来锻炼孩子们的观察力和...

    多方案的经济比较与选择方法讲义.pptx

    1. 头脑风暴法(Brain Storming, BS)是一种集体创新技巧,鼓励参与者提出各种想法,不受限制,旨在激发创意和思维共振。会议主持者需营造自由开放的氛围,避免过早评判,以便挖掘更多的潜在方案。 2. 哥顿法...

Global site tag (gtag.js) - Google Analytics