【发布时间】:2020-05-02 21:33:24
【问题描述】:
在 C# 中使用 Selenium webdriver 编写测试。我绝对无法理解为什么只有(相同级别)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”类),但使用 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,我什至没有手动编写它。它应该是快速和直接的,对吧?谢谢。
【问题讨论】:
标签: c# selenium selenium-webdriver xpath selenium-chromedriver