我在回答后更新了问题!
我尝试在网页的列表中查找包含 <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>
答案 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);