+-
xPath只适用于同一级别的多个div标签中的一个。

在C#中使用Selenium webdriver编写测试,我完全不能理解为什么只有在(同级)div元素列表中的第一个元素可以用xPath.我有这样一个html,我检查了页面上的两个元素,两个不同的div。我完全不能理解为什么只有(同级)div元素列表中的第一个元素可以用xPath识别。我有这个html,我检查了页面上的两个元素,两个不同的div。通过运行这段简单的代码,我只复制了第一个元素的文本。

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实际上是隐藏在页面中的(可能是因为它缺乏 "chapter_visible "类),但确实在html中用Inspect!

如果这对你有帮助,我要说的是

"/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,甚至没有手动写。本来应该是快速直接的吧?谢谢你。

1
投票
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");