Selenium 硒+;水豚:在元素中的任意位置查找选择器
假设我们有一个Selenium 硒+;水豚:在元素中的任意位置查找选择器,selenium,xpath,capybara,Selenium,Xpath,Capybara,假设我们有一个,在它的深处有一个元素 我需要的是一种使用水豚和/或硒的方法访问任何div内部特定内容的方法 问题是,页面上有另一个而不是在内,所以 within(:xpath,'//div[@class="whatever"]') do find(:xpath,'//div[@class="inside-whatever"]) end 返回一个错误,即页面上的任意div中都有多个div 有效的是从类似的内容构建xpath '//div[@class=“whatever”]/div/div[
,在它的深处有一个元素
我需要的是一种使用水豚和/或硒的方法访问任何div内部特定内容的方法
问题是,页面上有另一个
而不是在
内,所以
within(:xpath,'//div[@class="whatever"]') do
find(:xpath,'//div[@class="inside-whatever"])
end
返回一个错误,即页面上的任意div中都有多个div
有效的是从类似的内容构建xpath
'//div[@class=“whatever”]/div/div[3]/div/div[5]'
但这纯粹是疯狂
那么,有没有更好的方法可以在任何给定元素中的任意位置查找选择器,而无需指定直接路径?您可以像这样合并XPath:
//div[@class="whatever"]//div[@class="inside-whatever"]
这里真正的问题是您已经落入了XPath//陷阱
find(:xpath,'//div[@class="inside-whatever"])
全局搜索,而不是从上下文节点搜索。相反,您应该习惯于使用/
启动XPath,它将从当前上下文节点进行搜索
within(:xpath,'.//div[@class="whatever"]') do
find(:xpath,'.//div[@class="inside-whatever"])
end
做你想做的事。水豚自述中提到了这一点-
注意:CSS选择器没有这个问题,对于大多数元素,人们都选择ReadCleaner,这就是为什么Capybara默认为:CSS选择器
within('div.whatever') do
find('div.inside-whatever")
end
你试过把他们两个合并吗//div[@class=“whatever”]//div[@class=“insidewhatever”]
。如果水豚需要一个结果,你也可以通过一个命令只获取第一个节点。现在,先生,这个//div[@class=“whater”]//div[@class=“inside whater”]
确实有效。请随意将其作为解决方案发布。这违背了的全部目的