首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不影响性能的情况下使用watir-webdriver找到<acronym>标记?

如何在不影响性能的情况下使用watir-webdriver找到<acronym>标记?
EN

Stack Overflow用户
提问于 2012-04-11 01:01:04
回答 4查看 915关注 0票数 4

我在Cucumber (1.1.9)测试中使用watir-webdriver (0.5.3)。我正在尝试验证<acronym>标记的文本值。代码是遗留的,有计划将其更改为<div><span>标记,但同时我必须处理它。我首先尝试:

代码语言:javascript
复制
@browser.acronym(:id => /expense_code(.*)/).text

我收到以下错误:

代码语言:javascript
复制
NoMethodError: undefined method `acronym' for #<Watir::Browser:0x33e9940>

我查看了Watir代码以查看如何创建标记对象,并发现它们似乎是基于HTML5规范动态创建的,但随后我还在element.rb中发现了一条注释,说明它们不再是根据该规范创建的。无论如何,我看不到一种简单的方法来继承<span>对象并将其称为<acronym>对象。因此,我研究了替代方法,找到了element对象。

代码语言:javascript
复制
@browser.element(:id => /expense_code(.*)/).text

这段代码可以工作,但它大约需要一分钟来遍历我的页面。我现在只能使用正则表达式,因为标签id实际上是动态生成的,而我目前还没有办法计算出这些值。这是标记的实际外观:

代码语言:javascript
复制
<acronym class="editable select fillwith:exp_codes default:E100"
title="Expense Code: Expenses" id="expense_code114_582_10777">
E100    </acronym>

如果有任何关于如何提高测试性能的想法,我将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-12 03:31:00

我不确定这里的适当礼节是什么,但这是我在#watir IRC聊天中使用Chuck的回复和jarib的反馈得出的答案。有了我所有的例子,expense_code = 'E100'

代码语言:javascript
复制
@browser.element(:tag_name => "acronym", 
                    :class => "default:#{expense_code}").text

上面的代码以非常合理的速度工作,并且不需要xpath。它是以下代码的缩写:

代码语言:javascript
复制
@browser.element(:tag_name => "acronym", 
     :class => "editable select fillwith:exp_codes default:#{expense_code}").text

我了解到我不需要传递整个字符串。由空格分隔的类中的任何内容都由watir优雅地处理。我将该代码改编自以下xpath:

代码语言:javascript
复制
@browser.element(:xpath => "//acronym[contains(@class,
    \'editable select fillwith:exp_codes default:#{expense_code}\')]").text

上面代码中的陷阱是需要对类值周围的'进行转义,以便正确计算。

仅仅搜索类(下面的代码)是不起作用的。我不知道为什么。我确实注意到它用请求冲击数据库。无论它在做什么,页面都不喜欢它。尽管它多次尝试的原因是我把一个wait_until_present放进去了。

代码语言:javascript
复制
@browser.element(:class, "editable select fillwith:exp_codes
    default:#{expense_code}").text

谢谢你的帮助。:)

票数 1
EN

Stack Overflow用户

发布于 2012-04-11 03:21:01

使用XPath将元素限制为只使用首字母缩写标记是否有助于提高性能?

代码语言:javascript
复制
@browser.element(:xpath, "//acronym[contains(@id, 'expense_code')]")

更新:正如Chuck提到的,CSS-Selector也是一个选项:

代码语言:javascript
复制
@browser.element(:css => "acronym[id^=expense_code]")
票数 4
EN

Stack Overflow用户

发布于 2012-04-11 03:33:19

这个类名是可预测的吗?您是否可以从一个集合部分加上您将要验证的文本(与上面的示例相同)构建它,然后继续执行该操作?

代码语言:javascript
复制
acronym = 'E100'
browser.element(:class, 'editable select fillwith:exp_codes default:#{acronym}'.text.should == acronym
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10093114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档