xPath仅适用于在同一级别找到的多个div标记中的一个



使用C#中的Selenium Web驱动程序编写测试。我完全不明白为什么只有(同级别(div元素列表中的第一个元素可以用xPath标识。我有这个html,我检查了页面上的两个元素,两个不同的div。通过运行以下SIMPLE代码,我只复制了第一个元素的文本:

IWebElement chapterElement = webDriver.FindElement(By.XPath("/html/body/div[3]/main/div[2]/div[3]/article/div[1]"));  

之后我可以键入:chapterElement.Text查找内部文本。

另一个是另一个div,与第一个级别相同,是我刚刚从HTML复制的xPath(复制整个xPath(:

IWebElement chapterElement = webDriver.FindElement(By.XPath("/html/body/div[3]/main/div[2]/div[3]/article/div[2]"));   

它不会失败,但也不会复制文本,文本是"(空字符串(。

这两个div之间的唯一区别是:

  • 路径中的最后一段:div[1]与div[2]。

  • 第二个div实际上是隐藏在页面中的(可能是因为它缺少类"chaptervisible"(,但通过Inspect完全显示在html中!

如果这有帮助,我会说

"/html/body/div[3]/main/div[2]/div[3]/article/div[1]"

对应于:

<div class="chapter chapter chapter_visible" data-chapterno="0" data-chapterid="5e8798266cee070006f5a3d1" style="display: block;">
<h1>some text</h1>
<div class="chapter__content"><p>some text</p>
<p>some text</p>
<p>some text</p>
<ul>
<li>some text</li>
<li>some text</li>
<li>some text.</li>
</ul></div>
</div>

以及"/html/body/div[3]/main/div[2]/div[3]/article/div[2]"(第二个xPath(对应于以下内容(与第一个位于同一级别(:

<div class="chapter chapter" data-chapterno="1" data-chapterid="5e8798436cee070006f5a3d2">
<h1>some text</h1>
<div class="chapter__content"><p>some text</p>
<p><strong>some text</strong></p>
<p>some text.</p>
<p>some text</p>
<p>some text</p></div>
</div>

这是我第一次使用xPath,有点失望,因为我刚刚复制了xPath,甚至没有手动编写。它应该是快速和直接的,对吧?非常感谢。

IWebElement chapterElement = webDriver.FindElement(By.XPath("//div[@class='chapter chapter']"));

你能试试这个吗?

如果您想要get_attribute

IWebElement chapterElement = webDriver.FindElement(By.XPath("//div[@class='chapter chapter']")).GetAttribute("attribute_name");

相关内容

  • 没有找到相关文章

最新更新