2013-08-31 40 views
1

page.find_by_id(id)工作,但做page.assert_selector("tr##{id}") returns a Capybara :: ElementNotFound`可能的原因是什么?水豚 - assert_selector(“tr#1234”)不起作用,但find_by_id(1234)确实

对于背景,我使用Poltergeist驱动程序为Capybara

我的HTML的结构如下所示:

<tbody> 
    <tr id="1234"> 
    <td>Rico Jones</td> 
    <td><a href="/price_requests/5678">Price Request</a></td> 
    </tr> 
    <tr id="2345"> 
    <td>Rico Jones</td> 
    <td><a href=/price_requests/6789">Price Request</a></td> 
    </tr> 
</tbody> 

我已经证实,我的HTML是走出来用骚灵的page.driver.debug功能,并查看由测试所产生的实际HTML预期。

当我在测试中插入类似的东西时,我收到Capybara::Poltergeist::InvalidSelector错误消息The browser raised a syntax error while trying to evaluate the selector

lead = Lead.first 
assert_selector "tr##{lead.id}" 

这样做时,我也得到一个错误:

lead = Lead.first 
within "tr##{lead.id}" do 
    click_on "Price Request" 
end 

但是,使用find_by_id作品:

lead = Lead.first 
find_by_id(lead.id).click_on("Price Request") 

根据我的水豚的理解,这不应该是这样的。难道我做错了什么?

+0

您可能会看到不一致性,因为ID不应以数字开头:http://css-tricks.com/ids-cannot-start-with-a-number/。 –

+0

你是对的。更改'id'以一封信开头解决了我的问题。我实际上得到了一个'Capybara :: Poltergeist :: InvalidSelector:浏览器在尝试评估选择器错误时引发了一个语法错误,这应该让我失望。想创建一个我能接受的答案吗? –

回答

2

这是因为ID不应以数字开头,因为shown here

ID和名称标记必须以字母开头([A-ZA-Z]),并且可以是 后跟任意数量的字母,数字([0-9]),连字符( “ - ”) , 下划线(“_”),冒号(“:”)和句点(“。”)。

相关问题