Selenium:如何在包含 html 标签的页面上查找文本? (文本节点)

时间:2021-07-21 09:38:28

标签: selenium selenium-webdriver selenium-chromedriver

我在回答后更新了问题!

我尝试在网页的列表中查找包含 <p> text </p> 之类的 html 标记的文本。

这是它在网页上的外观截图: Screenshot of text to search for

在“inspect”中我使用了 //*[text()='<p> First do this, then this</p>'],可以在上面的屏幕截图中找到。

在使用此代码行查找文本的代码中:

webDriver.FindElement(By.XPath("//*[text()='<p> First do this, then this</p>']"))

但是在测试运行期间它给出了这个错误信息:

<块引用>

OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法定位元素:{"method":"xpath","selector":"///*[text()=' 先做这个,然后做这个']"}

如您所见,selenium 确实以某种方式忽略了 html 标签 <p> </p>

来自 Cruisepandey 的回答和解决方案:

感谢@cruisepandey,我现在知道了,我的文本在文本节点中。 获取文本的唯一方法是使用以下代码:

var ele = webDriver.FindElement(By.XPath("//table[@class='mud-table-root']//tbody/tr[1]/td[2]"));
        Console.WriteLine(ele.Text);

这里的输出是: <p> First do this, then this</p>

2 个答案:

答案 0 :(得分:0)

p 是元素标记名称,而不是其文本的一部分。
也可能文本中有空格。在这种情况下,我更喜欢使用 contains 而不是完全等式文本检查。
试试这个:

webDriver.FindElement(By.XPath("//p[contains(text(),'First do this, then this')]"))

答案 1 :(得分:0)

这是一个文本节点,您不能简单地使用 xpath v1.0 中的 text() 方法

您可以尝试使用以下 xpath :

(//table[@class='mud-table-root']//tbody/tr)[1]/td[2]

代码:

var ele = webDriver.FindElement(By.XPath("//table[@class='mud-table-root']//tbody/tr[1]/td[2]/text()"));
Console.WriteLine(ele.Text);

代码(显式等待):在你想要点击它。

var ele = new WebDriverWait(webDriver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("(//table[@class='mud-table-root']//tbody/tr)[1]/td[2]")));
Console.WriteLine(ele.Text);