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

时间:2018-05-23 09:42:30

标签: c# selenium-webdriver xpath webdriver selenium-chromedriver

我是一名测试自动化工程师,他在过去的几年里一直在使用selenium这是我在Stackoverflow中的第一篇文章。

我正在尝试从元素中获取文本,但是selenium甚至没有识别元素。我正在使用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..

所有xpath 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是正确的,没有涉及框架,页面中没有等待问题,因为我正在成功地执行对附近元素的操作,并且我给了页面足够的时间加载。所有正常的selenium设置都在我的系统中完成,除此之外一切正常。

Selenium版本:3.12.0

1 个答案:

答案 0 :(得分:0)

根据您提供的用于检索文字有效 HTML ,您可以使用ExecuteScript()中的IJavaScriptExecutor Interface方法,如下所示:

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