使用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");