繁体   English   中英

如何使用Selenium C#获取元素外部的文本以及运行时间的变化?

[英]How to get the text which is outside of a element and changes in the run time using selenium c#?

我有一段代码如下

<div class="span6" style="text-align:right;">
    <span class="muted" style="padding-left:20px;">Member ID: </span>MKL123451KKM
    <span class="muted" style="padding-left:20px;">Service Date: </span>05/08/2018
</div>

在上面的代码中,我想获取值“ MKL123451KKM ”,该值将经常更改。

我已经尝试使用下面的xpaths给出了错误。

XPATH

  1. /html/body/div/span[1][contains(text(),'Member ID:')]/../text()

  2. /html/body/div/span[1][contains(.,'Member ID:')]/../text()

错误

xpath表达式的结果:

/html/body/div/span[1][contains(text(),'Member ID:')]/../text() is: [object Text]. It should be an element.

注意:

我在VS 2015 IDE中使用IE和C#的Selenium驱动程序

有人可以对此发表看法吗?

根据您已共享的HTML,文本MKL123451KKM不在任何子<span>节点内,而在父<div>节点内。 要提取文本,例如MKL123451KKM ,可以使用以下代码块:

IWebElement elem = driver.FindElement(By.XPath("//div[@class='span6']"));
string text = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].childNodes[2].textContent;", elem);

你还很亲密 创建从HTML标记开始或具有太多级别的定位器通常不是一个好习惯,因为它比较脆弱(在页面更改时更容易破裂)。 理想情况下,您将通过文本标签找到标签元素,例如“ Member ID”,然后找到以下文本节点。 这种方法的最大好处是它与“成员ID”标签绑定在一起。 其他一些答案则被硬编码到一个特定的文本节点上,这也许现在不错,但是如果数据改变,它可能会返回错误的值。

您可以将所有这些包装在传递标签的函数中,并返回值。

public string GetValue(string labelName)
{
    IWebElement e = Driver.FindElement(By.XPath($"//span[contains(.,'{labelName}')]"));
    string s = (string)((IJavaScriptExecutor)Driver).ExecuteScript("return arguments[0].nextSibling.textContent;", e);
    return s.Trim();
}

你会这样称呼它

GetValue("Member ID")

那是因为文本在div内。 您将需要从xpath获取文本:

//div[@class='span6']

即使此xpath不能很好地防止更改,但如果从中获取文本,它也应该可以工作。 文本为MKL123451KKM和2018/05/08

试试这个XPath

//div[@class='span6']/span/following-sibling::text()[1]

暂无
暂无

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

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