c# - 如何使用 selenium c# 获取元素之外的文本并在运行时发生变化?

标签 c# selenium selenium-webdriver xpath webdriver

我有一段代码如下

<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 标记开始或具有太多级别的定位器通常不是一个好习惯,因为它更易碎(当页面更改时更容易损坏)。理想情况下,您会通过文本标签找到标签元素,例如“成员 ID”,然后找到以下文本节点。这种方法的最大好处是它与“成员(member) 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")
    

    关于c# - 如何使用 selenium c# 获取元素之外的文本并在运行时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228355/

    相关文章:

    jquery - 无法使用 Selenium WebDriver 单击搜索中的树加号图标

    c# - 在 .NET 中向电子邮件添加内容描述

    c# - 如何在客户端连接时通知 WCF 服务的主机?

    python - 通过网页上的多个 xpath 元素进行过滤

    java - safardriver 在 @Aftermethod 中调用 driver.close() 之前自动关闭

    javascript - 如何在 type=textbox 的 div 中输入文本?

    c# - 正确的 Objective-C Helper "Wannabe"私有(private)方法?

    c# - 在 C# 中,如何捕获 Web 服务调用中使用的 SOAP?

    java - 无法从嵌套对象获取属性

    javascript - WebDriverIO Selenium 将命令行参数从 config.js 文件传递​​到 Chrome