我回答了问题后更新了这个问题!
我试图在网页上的列表中找到一个文本,其中包含一个类似于<p> text </p>的html标记。
这是一个截图,它在网页上的样子:要搜索的文本的截图
在“检查”中,我使用了//*[text()='<p> First do this, then this</p>'],如上面的屏幕截图所示。
在代码im中,使用此代码查找文本:
webDriver.FindElement(By.XPath("//*[text()='<p> First do this, then this</p>']"))但是,在测试运行期间,它会给出以下错误消息:
OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//*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>
发布于 2021-07-21 09:46:30
这是一个文本节点,不能简单地使用XPathv1.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);发布于 2021-07-21 09:43:53
p是元素标记名,而不是其文本的一部分。
文本中也可能有空格。在这种情况下,我更喜欢使用contains而不是精确的等式文本检查。
试一试:
webDriver.FindElement(By.XPath("//p[contains(text(),'First do this, then this')]"))https://stackoverflow.com/questions/68467262
复制相似问题