【问题标题】:How do I get an parent HTML Tag with Selenium WebDriver using Java [duplicate]如何使用 Java 获取带有 Selenium WebDriver 的父 HTML 标签 [重复]
【发布时间】:2012-08-24 22:46:47
【问题描述】:

我有一个搜索 <span class="legend"> 的测试。在上一个级别上,我有一个包含多个值的字段集。这是我的问题。我没有得到这个字段集的定位器。

首先我得到一个包含所有 class=legend 对象的列表:

List<WebElement> groupList = driver.findElements(By.className("legend"));

这很好用,我有一个包含几个 Web 元素的列表。

现在我想迭代这个列表并只保存上一级字段集中的每个值。问题是 Selenium 找不到字段集的 id。

我尝试tempGroupElement.getAttribute("id") 获取 id,但它不起作用。

有什么想法吗?

【问题讨论】:

  • 无法发布 HTML 部分,不知道为什么。希望有足够的信息。

标签: java selenium selenium-webdriver


【解决方案1】:

我在 C# 中有一个方法。

public static IWebElement GetParent(IWebElement e)
{
   return e.FindElement(By.XPath(".."));
}

希望对你有帮助:)

【讨论】:

  • 不,它不起作用。 Xpath 是错误的。我尝试了类似的 xpath,但它们也不起作用。感谢您的回答
  • By.XPath("//..")) 怎么样?
  • 为我工作了一个魅力。谢谢塔德斯科。 - PS:Python Chrome 驱动程序。
  • 在 node.js / webdriverjs / chrome 中工作得很好 :)
  • 谢谢。帮助了我!
【解决方案2】:

您可以使用WebElement.findElement(By.xpath("parent::*"))

我试过了,它在 selenium 中工作。

【讨论】:

  • 这是我的首选方式。使用正确的 Xpath 定位器,您可以在 DOM 中上下移动,直到找到您要查找的内容。这在您想要查找包含某些文本的父元素的子元素(例如)的情况下非常有用。
  • Safari 不支持 XPath 吗?
【解决方案3】:

这将在 IWebElement 之上创建一个扩展,让您可以直接在子 IWebElement 上调用 GetParent

public static class MyExtensions
{
    public static IWebElement GetParent(this IWebElement node)
    {
        return node.FindElement(By.XPath(".."));
    }
}  

示例用法...

IWebElement node = WebDriver.FindElement('..');
IWebElement parent = node.GetParent();

【讨论】:

  • 兄弟姐妹有这么简单的事情吗?
  • FindElement 将抛出 NoSuchElementException 如果它没有找到任何。 IMO 使用 FindElements(By.XPath("..")).SingleOrDefault() 更安全,这样如果没有找到,它将返回 null。真的希望 Selenium 支持像 FindElementIfAny 这样的方法,因为有时我真的不希望抛出异常。
猜你喜欢
  • 2013-05-24
  • 2013-12-31
  • 2017-05-09
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多