GVKun编程网logo

如何使用Selenium通过索引在Xpath节点集中选择指定的节点?

12

这篇文章主要围绕如何使用Selenium通过索引在Xpath节点集中选择指定的节点?展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何使用Selenium通过索引在Xpath节点集中选择指定的节

这篇文章主要围绕如何使用Selenium通过索引在Xpath节点集中选择指定的节点?展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何使用Selenium通过索引在Xpath节点集中选择指定的节点?,同时也会为您带来c# – 使用XPath从Atom XML文档中选择无节点?、php – Xpath选择没有子节点的节点、php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?、python+selenium+xpath 节点获取问题的实用方法。

本文目录一览:

如何使用Selenium通过索引在Xpath节点集中选择指定的节点?

如何使用Selenium通过索引在Xpath节点集中选择指定的节点?

我正在写一个selenium测试用例。这是我用来匹配数据表中所有“修改”按钮的xpath表达式。

//img[@title=''Modify'']

我的问题是,如何按索引访问匹配的节点集?我尝试过

//img[@title=''Modify''][i]

//img[@title=''Modify'' and position() = i]

但是两者都没有。.我也尝试了XPath checker(一个firefox扩展名)。总共找到13个匹配项,那么我完全不知道如何选择其中之一。
或者XPath是否支持指定选择的不在同一父节点下的节点?

答案1

小编典典

这是一个常见问题解答

//someName[3]

意思是someName文档中的所有元素,它们是someName其父元素的第三 个子元素-可能有很多这样的元素。

您想要的正是第三个someName元素

(//someName)[3]

说明
:的[]优先级(优先级)高于//。请记住,在//someName需要指定所选节点列表的第N个节点时,始终将类型的表达式放在方括号中。

c# – 使用XPath从Atom XML文档中选择无节点?

c# – 使用XPath从Atom XML文档中选择无节点?

我正在尝试以编程方式解析Atom提要.我将原子 XML下载为字符串.我可以将 XML加载到XmlDocument中.但是,我无法使用XPath遍历文档.每当我尝试时,我都会失效.

我一直在使用这个Atom提要作为测试:http://steve-yegge.blogspot.com/feeds/posts/default

调用SelectSingleNode()始终返回null,除非我使用“/”.这是我现在正在尝试的:

using (WebClient wc = new WebClient())
{
    string xml = wc.DownloadString("http://steve-yegge.blogspot.com/Feeds/posts/default");
    XmlNamespaceManager nsMngr = new XmlNamespaceManager(new NaMetable());
    nsMngr.AddNamespace(string.Empty,"http://www.w3.org/2005/Atom");
    nsMngr.AddNamespace("app","http://purl.org/atom/app#");
    XmlDocument atom = new XmlDocument();
    atom.LoadXml(xml);
    XmlNode node = atom.SelectSingleNode("//entry/link/app:edited",nsMngr);
}

我以为它可能是因为我的XPath,所以我也尝试了一个简单的根节点查询,因为我知道root应该工作:

// I've tried both with & without the nsMngr declared above
XmlNode node = atom.SelectSingleNode("/Feed");

无论我做什么,似乎都无法选择任何东西.显然我错过了一些东西,我只是无法弄清楚是什么.为了使XPath能够在这个Atom提要上工作,我需要做些什么?

编辑

Although this question has an answer,I found out this question has an almost exact duplicate: 07001

解决方法

虽然C#实现可能允许默认命名空间(我不知道),但XPath 1.0规范却没有.所以,给“Atom”自己的前缀:
nsMngr.AddNamespace("atom","http://www.w3.org/2005/Atom");

并适当地改变你的XPath:

XmlNode node = atom.SelectSingleNode("//atom:entry/atom:link/app:edited",nsMngr);

php – Xpath选择没有子节点的节点

php – Xpath选择没有子节点的节点

我有一个网页,我想通过代码修改(添加特定单词的链接).

HTML代码:

<div>
<h2>Notre histoire</h2>
<p>SPECIFICS WORDS<strong>1998 : la création</strong></p>
<p>pour objectif « de promouvoir,selon une démarche d’éducation active,auprès des jeunes et à travers eux,des projets d’expression collective et d’action de solidarité » (article 2).<br><br><strong>1999-2001 : les débuts SPECIFICS WORDS</strong></p>
<p>SPECIFICS WORDS<a href="#">SPECIFICS WORDS</a></p>
</div>

所以我的目标是prepec_replace在SPECIFIC WORDS上,但只有那些在P中,但是从A或STRONG或任何一个标签出来的人.

我不能使用任何类,或任何id,因为我以前不知道代码!
我尝试了preg_replace PHP函数,但它没有用,而且执行时间太长.

所以我的问题是:
如何用XPATh选择没有A,STRONG,IMG chidrens的节点?

解决方法

没有孩子的情况下,您无法选择节点.节点是树的子部分,除非它是叶子,在这种情况下它没有其他子节点.要选择包含单词“SPECIFIC”的TextNode叶子,它们是P元素的直接子元素,您可以这样做

//p/text()[contains(.,'SPECIFIC')]

这将排除其他元素内的文本节点,例如在强者或.

要替换它们,你可以

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//p/text()[contains(.,"SPECIFIC")]') as $textNode) {
    $textNode->nodeValue = "REPLACED";
}
echo $dom->saveHTML();

另见DOMDocument in php和XPath Tutorial

php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?

php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?

选择文档的所有节点的xpath表达式是什么?

给出这个例子XML:

<div/>

我包含三个节点:< div> (元素),类=(属性)和“标题”(文本).

$doc = new DOMDocument;
$doc->loadXml('<div/>');
$xpath = new DOMXPath($doc);

我尝试使用// node():

$xpath->query('//node()');

它只返回所有元素节点(我假设因为//).有没有办法在属性值中添加属性和文本节点等其他节点?

附加示例:

我可以使用DOMDocument API获取每个节点,例如获取属性值的文本节点:

$doc = new DOMDocument;
$doc->loadXml('<div/>');
$class = $doc->documentElement->getAttributeNode('class');
echo $class->childNodes->item(0)->nodeName;

这使:

#text

如何获取具有一个xpath表达式的所有节点的超集,尤其是包括该示例性类属性 – 节点子文本节点?

解决方法:

使用:

//node() | //@* | //namespace::*

这将选择任何节点(类型为文档节点/,元素节点,文本节点,处理指令节点和注释节点)以及任何属性节点和任何命名空间节点 – 即所有节点,因为没有其他类型的节点.

如何访问包含所选节点的获取的XmlNodeList取决于您使用的特定XPath引擎的API – 阅读并使用您的文档.

基于XSLT的示例:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">

  <xsl:for-each select=
   "//node() | //@* | //namespace::*">

   Type: <xsl:text/>

   <xsl:choose>
    <xsl:when test="not(..)">
     <xsl:text>document node </xsl:text>
    </xsl:when>
    <xsl:when test="self::*">
     <xsl:text>element </xsl:text>
    </xsl:when>
    <xsl:when test="self::text()">
     <xsl:text>text-node </xsl:text>
    </xsl:when>
    <xsl:when test="self::comment()">
     <xsl:text>comment-node </xsl:text>
    </xsl:when>
    <xsl:when test="self::processing-instruction()">
     <xsl:text>PI-node </xsl:text>
    </xsl:when>
    <xsl:when test="count(.|../@*) = count(../@*)">
     <xsl:text>attribute-node </xsl:text>
    </xsl:when>
    <xsl:when test=
    "count(.|../namespace::*) = count(../namespace::*)">
     <xsl:text>namespace-node </xsl:text>
    </xsl:when>
   </xsl:choose>

   <xsl:text>Name: "</xsl:text>
   <xsl:value-of select="name()"/>" <xsl:text/>

   <xsl:text>Value: </xsl:text>
   <xsl:value-of select="."/>

  </xsl:for-each>

 </xsl:template>
</xsl:stylesheet>

当这个XSLT转换应用于任何XML文档时,它使用上面的XPath表达式选择所有节点(转换故意排除任何只有空格的文本节点)并输出(按文档顺序)类型,名称和字符串值选定的节点.

例如,在应用于此XML文档时:

<networkOfBridges xmlns:x="x">
    <bridge id="1"  otherside="A" />
    <!-- A Comment -->
    <bridge id="2"  oneside="A"/>
    <?PI Processing Instruction ?>
    <bridge id="3"  oneside="A" otherside="A" />
</networkOfBridges>

结果是:

   Type: element Name: "networkOfBridges" Value: 

   Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace

   Type: namespace-node Name: "x" Value: x

   Type: element Name: "bridge" Value: 

   Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace

   Type: namespace-node Name: "x" Value: x

   Type: attribute-node Name: "id" Value: 1

   Type: attribute-node Name: "otherside" Value: A

   Type: comment-node Name: "" Value:  A Comment 

   Type: element Name: "bridge" Value: 

   Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace

   Type: namespace-node Name: "x" Value: x

   Type: attribute-node Name: "id" Value: 2

   Type: attribute-node Name: "oneside" Value: A

   Type: PI-node Name: "PI" Value: Processing Instruction 

   Type: element Name: "bridge" Value: 

   Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace

   Type: namespace-node Name: "x" Value: x

   Type: attribute-node Name: "id" Value: 3

   Type: attribute-node Name: "oneside" Value: A

   Type: attribute-node Name: "otherside" Value: A

python+selenium+xpath 节点获取问题

python+selenium+xpath 节点获取问题

selenium 如果根据已获得的当前节点来获取父节点、兄弟节点,用 python 代码实现

如:现已获得 id="B" 的节点,如何在此基础上直接获取的 id=“A” 的节点(不用 xpath 去定位)

我们今天的关于如何使用Selenium通过索引在Xpath节点集中选择指定的节点?的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 使用XPath从Atom XML文档中选择无节点?、php – Xpath选择没有子节点的节点、php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?、python+selenium+xpath 节点获取问题的相关信息,可以在本站进行搜索。

本文标签: