繁体   English   中英

如何通过Xpath,C#和Selenium从元素内的文本节点中检索文本

[英]How to retrieve the text from a text node within an element through Xpath, C# and Selenium

我是一名测试自动化工程师,最近几年从事硒工作。这是我在Stackoverflow上的第一篇文章。

我正在尝试从元素中获取文本,但是硒甚至无法识别该元素。 我正在Visual Studio中使用specflow设置,并将c#用作语言。

以下是示例html代码(这只是HTML代码的示例结构,而不是原始的示例结构):

<p class="day">
 <meta atts="somevalue">
 <span>Some text</span>
 <meta atts="somevalue">
 <meta atts="somevalue">
 "Active"
</p>

我想从上面的HTML中获取文本Active

我为此编写了多个xpath,当我在chrome中检查时,xpaths正确,并且突出显示了元素

Xpaths试用:

1. //p[@class='day']/text()
2. //p[@class=''day]/meta[@atts='somevalue'][3]/following-sibling::text()
3. few more..

对于所有xpaths text()介于两者之间或末尾。 当我手动检查时,所有这些都是正确和独特的。

我正在自动化的网页中没有涉及框架。 也没有页面加载问题。 我尝试了不同的等待语句。 还尝试给出一个长thread.sleep()。

元素的位置始终相同。 仅其中的值将被更改。 即,此元素的xpath不是动态的。

我在下面的行中得到错误。 (驱动程序已正确初始化,它可用于其他所有功能)

String StatusVal = driver.FindElement(By.XPath("(//meta[@itemprop='closes'])[1]/following-sibling::text()")).Text;

无论我尝试什么,我都会收到以下错误,指出找不到元素,

OpenQA.Selenium.NoSuchElementException: Could not find element by: By.XPath: (//meta[@itemprop='closes'])[1]/following-sibling::text()

上面是实际的xpath,如果在同一个浏览器中测试失败后我手动检查xpath,则它在那里可用并且是唯一的。

即,在我的分析中,我的xpath是正确的,没有涉及框架,在页面中没有等待问题,因为我成功地对元素执行了近距离操作,并且给了我足够多的时间来加载页面。 所有正常的硒设置都在我的系统中完成,除此以外,其他一切工作正常。

硒版本:3.12.0

根据您提供的用于检索文本ActiveHTML ,可以从IJavaScriptExecutor Interface使用ExecuteScript()方法,如下所示:

IWebElement myElem = driver.FindElement(By.XPath("//p[@class='day']"));
string myText = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].lastChild.textContent;", myElem);
Console.WriteLine(myText);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM