Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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

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
Ruby 使用CSS或XPath按内容选择元素_Ruby_Xpath_Css Selectors_Capybara - Fatal编程技术网

Ruby 使用CSS或XPath按内容选择元素

Ruby 使用CSS或XPath按内容选择元素,ruby,xpath,css-selectors,capybara,Ruby,Xpath,Css Selectors,Capybara,如何使用CSS或XPath获取下面代码中与文本的链接 <div id="pagination"> <a href="link">2</a> <a href="link">3</a> <a href="link">4</a> <a href="link">5</a> <a href="link">6</a> <a

如何使用CSS或XPath获取下面代码中与文本的链接

<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>
如果查询该路径,您将得到一个文本为“Next”的元素


如果查询该路径,您将得到一个文本为“Next”的元素。

不太清楚您想要什么。如果您想要第十个链接:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>
EOT

doc.search('a')[9]
=> #<Nokogiri::XML::Element:0x80763880 name="a" attributes=[#<Nokogiri::XML::Attr:0x80763498 name="href" value="link">] children=[#<Nokogiri::XML::Text:0x80762fd4 "Next">]>
如果您不知道它将是哪个元素号,但正在键入文本并希望使用CSS,我会:

doc.search('a').select{ |n| n.content == 'Next' }.first
不幸的是,CSS不能搜索标签的文本,所以你必须有点创造性。XPath可以做到这一点:

doc.at('//a[text()="Next"]')

你想要什么还不太清楚。如果您想要第十个链接:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>
EOT

doc.search('a')[9]
=> #<Nokogiri::XML::Element:0x80763880 name="a" attributes=[#<Nokogiri::XML::Attr:0x80763498 name="href" value="link">] children=[#<Nokogiri::XML::Text:0x80762fd4 "Next">]>
如果您不知道它将是哪个元素号,但正在键入文本并希望使用CSS,我会:

doc.search('a').select{ |n| n.content == 'Next' }.first
不幸的是,CSS不能搜索标签的文本,所以你必须有点创造性。XPath可以做到这一点:

doc.at('//a[text()="Next"]')
如果规则是字符串值为Next的a是div的最后一个子级,则只需使用:

在这里,我们假设XML文档中最多存在一个div,其id属性具有分页的值——这对于XHTML文档来说是一个合理的假设

基于XSLT的验证:

在提供的XML文档上应用此转换时:

将计算XPath表达式,并将此计算中选定的节点复制到输出:

如果规则是字符串值为Next的a是div的最后一个子级,则只需使用:

在这里,我们假设XML文档中最多存在一个div,其id属性具有分页的值——这对于XHTML文档来说是一个合理的假设

基于XSLT的验证:

在提供的XML文档上应用此转换时:

将计算XPath表达式,并将此计算中选定的节点复制到输出:


实际上,使用css也可以做到这一点:

 #pagination a:nth-last-child(2)

假设它总是倒数第二个,并且您可以使用css 3选择器,实际上,也可以使用css执行此操作:

 #pagination a:nth-last-child(2)

假设它总是倒数第二,你可以使用css 3选择器

你不能使用jquery或css is must吗?我认为使用css是不可能的。它必须是css或XPath,因为Capybara只支持它们。你不能使用jquery或css is must吗?我认为使用css是不可能的。它必须是css或XPath,因为Capybara只支持它们。我不知道标记的位置,因为它发生了变化所以,第二个和第三个解决方案是好的。我不知道标签的位置,因为它改变了,所以,第二个和第三个解决方案是好的。你能解释一下它的含义吗。在这里为什么不/a[text='Next'当然你也可以这样做。如果我没有错的话,基本上是指当前节点。我记得。从前面开始,所以现在不能确定它是什么。你能解释一下它的含义吗。在这里?为什么不/a[text='Next'当然你也可以这样做!如果我没有错的话,基本上是指当前节点。我记得。从前面开始,所以现在无法确定它是什么。
<a href="link">Next</a>
 #pagination a:nth-last-child(2)