Ruby on rails 4 如何找到带有特定标记的CSS元素

Ruby on rails 4 如何找到带有特定标记的CSS元素,ruby-on-rails-4,rspec,css-selectors,capybara,integration-testing,Ruby On Rails 4,Rspec,Css Selectors,Capybara,Integration Testing,这是我的inspect元素片段: <div> <map> <area href="javascript:void(0)" log="miw" ... shape="poly" title="lender_marker test@example.com"> <area href="javascript:void(0)" log="miw" ... shape="poly" title="lender_marker othertest@e

这是我的inspect元素片段:

<div>
  <map>
    <area href="javascript:void(0)" log="miw" ... shape="poly" title="lender_marker test@example.com">
    <area href="javascript:void(0)" log="miw" ... shape="poly" title="lender_marker othertest@example.com">
  </map>
</div>

对于#2,我甚至无法尝试它,直到我首先能够找到区域对象,但我无法…。

您的CSS选择器没有问题,这让我相信这是一个可见性问题。您参考的教程使用的是
find_elements
,在Selenium中,它将查找与选择器匹配的所有元素。相反,当Capybara查找元素时,它只返回与选择器匹配的元素,并且确定用户可见

换句话说,我猜面积元素存在,但水豚认为它们不可见。你可能需要触发一些东西使这些区域变得可见

但是,无论可见性如何,都可以使用
:visible
选项验证图元是否存在:

# Validate that a specific area exists in the DOM
page.should have_selector('area[title="lender_marker test@example.com"]', visible: false)

# Count the number of lender_markers
page.all('area[title^="lender_marker"]', visible: false).length
#=> 2

# Count the number of lender_markers with minimum in case of async loading
puts page.all('area[title^="lender_marker"]', visible: false, minimum: 2).length
#=> 2

# Validate the number of lender_markers
page.should have_selector('area[title^="lender_marker"]', visible: false, count: 2)

谢谢这提供了很好的洞察力,所以我查看了
保存和打开页面的情况。您在“不可见”上完全正确,但在本例中,它甚至没有加载,因为Google API不希望加载到测试服务器中。。。我在本地服务器上也遇到了这个问题,但通过启用带有
config.action\u dispatch.default\u headers.merge的CORS解决了这个问题!({'Access Control Allow Origin'=>'*','Access Control Request Method'=>'*'})在
application.rb
中,但我想这不会扩展到测试服务器。。。有什么想法吗?对不起,我没有使用过谷歌API,所以没有任何见解。
# Validate that a specific area exists in the DOM
page.should have_selector('area[title="lender_marker test@example.com"]', visible: false)

# Count the number of lender_markers
page.all('area[title^="lender_marker"]', visible: false).length
#=> 2

# Count the number of lender_markers with minimum in case of async loading
puts page.all('area[title^="lender_marker"]', visible: false, minimum: 2).length
#=> 2

# Validate the number of lender_markers
page.should have_selector('area[title^="lender_marker"]', visible: false, count: 2)