我在Cucumber (1.1.9)测试中使用watir-webdriver (0.5.3)。我正在尝试验证<acronym>标记的文本值。代码是遗留的,有计划将其更改为<div>或<span>标记,但同时我必须处理它。我首先尝试:
@browser.acronym(:id => /expense_code(.*)/).text我收到以下错误:
NoMethodError: undefined method `acronym' for #<Watir::Browser:0x33e9940>我查看了Watir代码以查看如何创建标记对象,并发现它们似乎是基于HTML5规范动态创建的,但随后我还在element.rb中发现了一条注释,说明它们不再是根据该规范创建的。无论如何,我看不到一种简单的方法来继承<span>对象并将其称为<acronym>对象。因此,我研究了替代方法,找到了element对象。
@browser.element(:id => /expense_code(.*)/).text这段代码可以工作,但它大约需要一分钟来遍历我的页面。我现在只能使用正则表达式,因为标签id实际上是动态生成的,而我目前还没有办法计算出这些值。这是标记的实际外观:
<acronym class="editable select fillwith:exp_codes default:E100"
title="Expense Code: Expenses" id="expense_code114_582_10777">
E100 </acronym>如果有任何关于如何提高测试性能的想法,我将不胜感激。
发布于 2012-04-12 03:31:00
我不确定这里的适当礼节是什么,但这是我在#watir IRC聊天中使用Chuck的回复和jarib的反馈得出的答案。有了我所有的例子,expense_code = 'E100'。
@browser.element(:tag_name => "acronym",
:class => "default:#{expense_code}").text上面的代码以非常合理的速度工作,并且不需要xpath。它是以下代码的缩写:
@browser.element(:tag_name => "acronym",
:class => "editable select fillwith:exp_codes default:#{expense_code}").text我了解到我不需要传递整个字符串。由空格分隔的类中的任何内容都由watir优雅地处理。我将该代码改编自以下xpath:
@browser.element(:xpath => "//acronym[contains(@class,
\'editable select fillwith:exp_codes default:#{expense_code}\')]").text上面代码中的陷阱是需要对类值周围的'进行转义,以便正确计算。
仅仅搜索类(下面的代码)是不起作用的。我不知道为什么。我确实注意到它用请求冲击数据库。无论它在做什么,页面都不喜欢它。尽管它多次尝试的原因是我把一个wait_until_present放进去了。
@browser.element(:class, "editable select fillwith:exp_codes
default:#{expense_code}").text谢谢你的帮助。:)
发布于 2012-04-11 03:21:01
使用XPath将元素限制为只使用首字母缩写标记是否有助于提高性能?
@browser.element(:xpath, "//acronym[contains(@id, 'expense_code')]")更新:正如Chuck提到的,CSS-Selector也是一个选项:
@browser.element(:css => "acronym[id^=expense_code]")发布于 2012-04-11 03:33:19
这个类名是可预测的吗?您是否可以从一个集合部分加上您将要验证的文本(与上面的示例相同)构建它,然后继续执行该操作?
acronym = 'E100'
browser.element(:class, 'editable select fillwith:exp_codes default:#{acronym}'.text.should == acronymhttps://stackoverflow.com/questions/10093114
复制相似问题