2009-10-27 72 views
1

下面的作品就好了:检查元素不存在使用WebRat

Then /^I should see a button called "([^\"]*)"$/ do |name| 
    response.should have_selector("li") do |li| 
    li.should have_selector("a") do |a| 
     a.should contain(name) 
    end 
    end 
end 

现在,我需要这样的步骤来补充它:

Then /^I should not see a button called "([^\"]*)"$/ do |name| 
    [snip...] 
end 

标准“而且我不应该看“并不令人满意,因为它会在页面的任何位置拾取目标短语 - 而不仅仅是在按钮内。我特别需要检查没有包含目标文本的按钮。

我的第一反应是去尝试这样的:

Then /^I should see a button called "([^\"]*)"$/ do |name| 
    response.should have_selector("li") do |li| 
    li.should have_selector("a") do |a| 
     a.should_not contain(name) 
    end 
    end 
end 

当然,只要有网页上的任何按键,不包括目标文本将通过,即使有也是一个,但或多个包含目标文本的按钮。

您的想法?

非常感谢,

史蒂文。

回答

1

问题解决了!我给每一个控制类“控制”,然后写 此步骤定义:

Then /^I should not see a control called "([^\"]*)"$/ do |name| 
    response.should have_selector("a.control", :content => name, :count 
=> 0) 
end 

当然,这个假设我很高兴给他们所有的一类 “控制” ......

s。

+0

很高兴你解决了它! – Rodreegez 2009-10-30 12:32:40

2

您可以使用assert_not_contain(也许not_contain,但我怀疑它不在rdoc)。

a.should assert_not_contain(name) 
+0

是的,assert_not_contain(name)是你想要的方法,如果你采取这种方法。 – Rodreegez 2009-10-27 11:52:10

+0

它工作。非常感激。 – 2009-10-29 09:48:10

+0

其实,并不是那么快... 但我不能将代码粘贴到评论框中,所以我在WebRat Google Group中继续。 – 2009-10-29 10:11:24

0

是你的按钮实际上是链接?对于按钮(其中有一个提交值),我使用:

assert_have_selector "input[type=submit][value=\"#{text}\"]" 

和:

assert_have_no_selector "input[type=submit][value=\"#{text}\"]" 

心连心。

+0

是的,你是对的。从技术上讲,他们是链接。我只是叫他们按钮,因为这是他们如何出现在界面中。 – 2009-10-29 09:47:28

+0

你让我思考。在我的所有测试中,我只是将“按钮”更改为“控制”。 – 2009-10-29 09:54:57