这是我的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>
...
表示我不会包含的一堆其他标签。仅供参考这些元素来自JS中的Google Maps API V3,我正在使用此great tutorial来尝试测试,除了教程在Selenium中工作,我想使用Capybara / Rspec。此外,首先使用this post来制定选择器。
我需要在集成测试中做两件事:
lender_marker
的#,无论电子邮件lender_marker
并附上特定的电子邮件对于#1 ......
lender_markers
来计算电子邮件,但我想如果我找不到lender_marker test@example.com
我就不会担心找到lender_marker
,因此,测试如下所述试验:
#Base test
page.should have_selector("area[title='lender_marker test@example.com']")
#First variation: change selector statement
page.assert_selector("area[title='lender_marker test@example.com']")
#Second variation: no quotes
page.should have_selector(area[title='lender_marker test@example.com'])
#Third variation: use map
page.should have_selector("map[title='lender_marker test@example.com']")
#Fourth variation: use div
page.should have_selector("div[title='lender_marker test@example.com']")
对于#2,我甚至无法尝试,直到我第一次找到区域对象,但我不能...
答案 0 :(得分:1)
您的CSS选择器没有任何问题,这让我相信它是一个可见性问题。您引用的教程是使用find_elements
,在Selenium中将找到与选择器匹配的所有元素。相比之下,当Capybara查找元素时,它只返回与选择器匹配的元素和被确定为对用户可见。
换句话说,我猜测区域元素存在但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)