是否可以仅从父元素而不是Selenium中的子元素获取文本?
示例:假设我有以下代码:
<div class="linksSection> <a href="https://www.google.com/" id="google">Google Link <span class="helpText">This link will take you to Google's home page.</span> </a> ... </div>
用C#(或任何语言),我将有:
string linktext = driver.FindElement(By.CssSelector(".linksSection > a#google")).Text; Assert.AreEqual(linkText, "Google Link", "Google Link fails text test.");
但是,链接文本将带有“ Google Link此链接会将您带到Google主页”。
如果不进行大量的字符串操作(例如获取所有子项的文本并从父项的结果文本中减去该文本),是否有办法从父项元素中仅获取文本?
这是一个常见的问题,selenium因为您无法直接访问文本节点- 换句话说,您的XPath表达式和CSS选择器必须指向实际元素。
selenium
这是您的问题的可能解决方案的列表:
Google Link
StringAssert.StartsWith()
outerHTML
Html Agility Pack
string outerHTML = driver.FindElement(By.CssSelector(".linksSection > a#google")).GetAttribute("outerHTML"); HtmlDocument html = new HtmlDocument(); html.LoadHtml(outerHTML); HtmlAgilityPack.HtmlNode a = html.DocumentNode.SelectNodes("//a[@id='google']"); HtmlNode text = strong.SelectSingleNode("following-sibling::text()"); Console.WriteLine(text.InnerText.Trim());