【问题标题】:Selenium Web Driver & C# - Selecting Second <h3> Inside A divSelenium Web 驱动程序和 C# - 在 div 中选择第二个 <h3>
【发布时间】:2016-06-07 10:37:54
【问题描述】:

我在 Visual Studio 和 C# 中使用 Selenium Webdriver。

我正在测试一个网页,该网页在同一个 div 中包含两个子标题。它们是“用户名”和“用户位置”。 我能够找到第一个 h3

 Assert.AreEqual("User Name", driver.FindElement(By.XPath("//form[@id='user-details-form']/h3")).Text);

但我无法让 Selenium 找到第二个,因为它总是能找到第一个。 我怎样才能让它跳过第一个找到第二个?

【问题讨论】:

  • 请分享您的 HTML 代码...

标签: c# selenium webdriver


【解决方案1】:

您可以通过提供如下文本来找到目标元素:-

Assert.AreEqual("User Name", driver.FindElement(By.XPath("//form[@id='user-details-form']/h3[contains(text(),'User Name')]")).Text);

希望它能帮助您找到User Name 子标题...:)

【讨论】:

    【解决方案2】:

    除非绝对必要,否则最好避免使用 XPath。在这种情况下,我会使用一个 css 选择器来获取所有 h3 元素的集合,然后如果你知道它的位置,你就可以找到你想要的。

    List<WebElement> list = driver.findElements(By.cssSelector("form#user-details-form h3"));
    WebElement e = list.get(5);
    Assert.AreEqual("User Name", e.Text);
    

    【讨论】:

    • 当我尝试使用它时,我收到错误“非泛型类型 'List' 不能与类型参数一起使用。” '找不到类型或命名空间 WebElement,您是否缺少 using 指令或 asembly 引用?'
    • @Leroy-S 使用 IList 而不是 List。您的错误将得到解决。
    • 我收到错误''找不到类型或命名空间名称 IList,您是否缺少 using 指令或程序集引用
    • 您的项目中缺少引用,或者您需要在页面顶部添加 using 指令。我不记得该指令是针对 webelement 的,但它会类似于 using OpenQA.Selenium; 如果这不起作用,那么您需要在项目中添加一个引用。
    【解决方案3】:

    我从不使用 XPATH...

    var h3s = wd.findElements(By.TagName("h3")).Where(p=>p.Text=="SomeValue").ToList();
    

    注意:您可能有不止一个,因此需要为正确的一个附加逻辑。

    【讨论】:

    • 当我尝试使用它时,我得到一个错误'IWebElement 不包含'where'的定义'
    • 你必须使用 LINQ... 你在使用 C# 吗?抱歉忘记问了。将此添加到文件“Using System.Linq;”的顶部
    • 是的,我的问题标题是 C#
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多