Selenium WebDriver C# - 获取文本

8

我在页面上有这个Html元素:

<li id="city" class="anketa_list-item">
   <div class="anketa_item-city">From</div>
    London
</li>

我发现了这个元素:

driver.FindElement(By.Id("city"))

如果我尝试:driver.FindElement(By.Id("city")).Text,那么我的结果是:"From\r\nLondon"。
如何只通过WebDriver获取到London?
4个回答

15

你可以轻松地使用 class-name

driver.FindElement(By.Class("anketa_item-city")).Text;

或使用Xpath

driver.FindElement(By.Xpath("\li\div")).Text;

1
你可以尝试这个:

var fromCityTxt = driver.FindElement(By.Id("city")).Text;
var city = Regex.Split(fromCityTxt, "\r\n")[1];

0

非常抱歉我的描述有误。我之前提供的xpath以函数/text()结尾,它选择的不是节点本身,而是节点的文本。

解决这种情况的方法是获取父节点的文本,然后替换子节点的文本,最后修剪以去除空格/特殊空格等....

var parent = driver.FindElement(By.XPath("//li"))
var child = driver.FindElement(By.XPath("//li/div"))
var london = parent.Text.Replace(child.Text, "").Trim()

注:

如果 Trim() 方法不能正常工作,则可能是“空格”实际上不是空格,而是其他不可打印字符,可能是制表符。在这种情况下,您需要使用 String.Trim 方法,并且传入一个字符数组:

char[] charsToTrim = { ' ', '\t' };
string result = txt.Trim(charsToTrim);

异常:给定的选择器//li[@id='city']/text()[2]无效或导致找不到网页元素。出现以下错误: InvalidSelectorError:xpath表达式“//li[@id ='city']/text()[2]”的结果是[object XrayWrapper [object Text]],而不是元素。 - Sergey
我刚刚更新了我的答案。希望能对你有所帮助。对于可能造成的任何不便,我感到抱歉。 - Nguyen Vu Hoang

0

这对我有用。

driver.FindElement(By.XPath("//li[@id='city']/text()"));enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接