我有如下代码
<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:
/html/body/div/span[1][contains(text(),'Member ID:')]/../text()
/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标记开始或具有太多级别的定位器通常不是一个好习惯,因为它比较脆弱(在页面更改时更容易破裂)。理想情况下,您会通过文本标签找到label元素,例如“成员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")