Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 硒+;水豚:在元素中的任意位置查找选择器_Selenium_Xpath_Capybara - Fatal编程技术网

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”]
确实有效。请随意将其作为解决方案发布。这违背了
的全部目的