Capybara:在 page.all 节点内查找元素
Capybara: to find element within page.all node
案例是这样的:一个页面上有n个面板。遍历每个面板:单击特定元素,然后查找仅在单击后出现的子元素的文本。
我可以使用类似 .has_css? 的方法,但这对我没有帮助。
显然在这里使用 find 会有所帮助,但它不适用于 Capybara::Node::Element
page.all(:css, panelCss).each do |panel|
counter+=1
if panel.has_css?(elemCss)
Actions.c 'Yay! Found #'+counter.to_s
res = panel.find(:css, elemCss).text #**should be replaced**
end
end
据我所知,我过去曾通过组合水豚和 jquery 做过同样的事情,但还没有找到决定。简短的谷歌搜索也没有帮助。
P.S。当然,我可以直接遍历可点击的元素,点击然后获取子元素的文本,而不是遍历它们的父面板,但是有两个原因:
- 我以后的代码需要它
- 点击后可能有超过 1 个子元素,所以看来我必须在 page.all 节点内搜索。
根据你的描述应该是这样的
page.all(:css, panelCss).each do |panel|
if panel.has_css?(elemToClickCss, wait: false) # assuming panels aren't dynamically loaded
c = panel.find(:css, elemToClickCss)
c.click
res = c.find(:css, clickedObjectsChildCss).text
end
end
案例是这样的:一个页面上有n个面板。遍历每个面板:单击特定元素,然后查找仅在单击后出现的子元素的文本。
我可以使用类似 .has_css? 的方法,但这对我没有帮助。
显然在这里使用 find 会有所帮助,但它不适用于 Capybara::Node::Element
page.all(:css, panelCss).each do |panel|
counter+=1
if panel.has_css?(elemCss)
Actions.c 'Yay! Found #'+counter.to_s
res = panel.find(:css, elemCss).text #**should be replaced**
end
end
据我所知,我过去曾通过组合水豚和 jquery 做过同样的事情,但还没有找到决定。简短的谷歌搜索也没有帮助。
P.S。当然,我可以直接遍历可点击的元素,点击然后获取子元素的文本,而不是遍历它们的父面板,但是有两个原因:
- 我以后的代码需要它
- 点击后可能有超过 1 个子元素,所以看来我必须在 page.all 节点内搜索。
根据你的描述应该是这样的
page.all(:css, panelCss).each do |panel|
if panel.has_css?(elemToClickCss, wait: false) # assuming panels aren't dynamically loaded
c = panel.find(:css, elemToClickCss)
c.click
res = c.find(:css, clickedObjectsChildCss).text
end
end