Ruby 如何在Watir中使用类名计算表行数?
我想对类名为Ruby 如何在Watir中使用类名计算表行数?,ruby,rspec,watir,watir-webdriver,Ruby,Rspec,Watir,Watir Webdriver,我想对类名为subjectField的所有表行进行计数,如果某行的类名为分隔符,则停止计数 HTML: 这对我不起作用。它说第6行的tr是未定义的方法 有人知道如何解决这个问题吗?问题1-检查行类 您正在传递tr参数,这就是Ruby认为它是一种方法的原因。在这种情况下,tr实际上是为循环的当前迭代选择的元素。要检查当前tr的class属性,elsif语句应为: elsif tr.class_name == "subjectField" 第2期-迭代行 请注意,您的线路也会出现问题: @f.di
subjectField
的所有表行进行计数,如果某行的类名为分隔符,则停止计数
HTML:
这对我不起作用。它说第6行的tr
是未定义的方法
有人知道如何解决这个问题吗?问题1-检查行类
您正在传递tr
参数,这就是Ruby认为它是一种方法的原因。在这种情况下,tr
实际上是为循环的当前迭代选择的元素。要检查当前tr的class属性,elsif
语句应为:
elsif tr.class_name == "subjectField"
第2期-迭代行
请注意,您的线路也会出现问题:
@f.div(:id => 'household').table(:class => 'color_table').tbody.trs.find
find
方法将在trs中迭代,直到块的计算结果为true。由于该块的计算结果始终为true或break,因此只能得到0或1个主题。使用每个:
@f.div(:id => 'household').table(:class => 'color_table').tbody.trs.each
把它放在一起
将上述修复组合在一起,该方法可以写成:
def countRows
@subjects = 0
table = @f.div(:id => 'household').table(:class => 'color_table')
table.tbody.trs.each do |tr|
break if tr.td(:class => "separator").exists? == true
@subjects += 1 if tr.class_name == "subjectField"
end
@subjects
end
我将这样做(未经测试的代码):
非常感谢。我对这个案子还有一个问题。问题是,当我使用“exists”时,它会从整个页面中搜索它,但我只需要在特定的“tr”中检查它。使用'if tr.td(:class=>“separator”)。是否存在?==true'我希望它检查某些tr是否有名为separator的类,如果没有,则转到下一个条件。代码tr.td(:class=>“separator”).exists?
将只检查当前tr中是否存在td。您看到的问题是由于您迭代tr的方式造成的-应该是每个而不是查找@Seda,您确定这解决了您的问题吗?对于示例html,它返回4,我相信您想要3。take_while块假定分隔符单元格位于subjectField行内,这不是真的。是的,它返回了4。我认为问题在于,驱动程序试图在trs中用类“subjectField”找到分隔符类。他在那里找不到,这就是为什么返回值是4,而不是3。第一个答案更适合我的问题。不过还是要谢谢你的帮助!:)是的,对不起,我误解了原来的问题。我已编辑代码以正确工作:)
@f.div(:id => 'household').table(:class => 'color_table').tbody.trs.each
def countRows
@subjects = 0
table = @f.div(:id => 'household').table(:class => 'color_table')
table.tbody.trs.each do |tr|
break if tr.td(:class => "separator").exists? == true
@subjects += 1 if tr.class_name == "subjectField"
end
@subjects
end
def count_rows
@f.div(:id => 'household')
.table(:class => 'color_table')
.trs
.take_while {|row| !row.td(:class => "separator").exists? }
.select {|row| row.class_name =~ /subjectField/}
.size
end