代码之家  ›  专栏  ›  技术社区  ›  delex

硒元素如何判断是否有子元素?

  •  3
  • delex  · 技术社区  · 7 年前

    我通过c#使用硒。我使用此XPath获取所有子元素

    element.FindElements(By.XPath("./child::*"));
    

    虽然如果没有子级,它会在超时后抛出一个错误。我正在寻找一种简单的方法来确定它是否有孩子,以避免出现例外情况。

    5 回复  |  直到 4 年前
        1
  •  3
  •   undetected Selenium    7 年前

    根据您的问题获取所有 子节点 父节点 您可以使用 FindElements() 方法 以下兄弟姐妹::* 内的属性 xpath 具体如下:

    • 示例代码块:

      List<IWebElement> textfields = new List<IWebElement>();
      textfields = driver.FindElements(By.XPath("//desired_parent_element//following-sibling::*"));
      

      笔记 :何时 FindElements() 与一起使用 含蓄地 明确地 等待, FindElements() 方法将在找到的集合中有0个以上的项时立即返回,或者在达到超时时返回空列表。

    • XPath详细信息:

      • 描述:此 xpath 该技术用于定位特定节点的同级元素。
      • 说明:The xpath 表达式获取父元素的所有同级元素,这些元素使用 所需的父元素
        2
  •  2
  •   Shreyansh    7 年前

    FindElements返回一个列表,因此可以检查列表的大小,如果为零,则表示没有子元素

    JAVA

    List<WebElement> childs = rootWebElement.findElements(By.xpath(".//*"));
    int numofChildren = childs.size();
    

    C类#

    IReadOnlyList<IWebElement> childs = rootWebElement.FindElements(By.XPath(".//*"));
    Int32 numofChildren = childs.Count;
    
        3
  •  0
  •   Thodoris Koskinopoulos    7 年前
    bool HasChild(IWebElement element)
    {
        //Save implicit timeout to reset it later 
        var temp = driver.Manage().Timeouts().ImplicitWait;
    
        driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
        bool exists = element.FindElements(By.XPath(".//*")).Count > 0;
        driver.Manage().Timeouts().ImplicitWait = temp;
    
        return exists;
    }
    
        4
  •  0
  •   Tiago Peres damanpreet singh    5 年前

    最简单的方法是:

    boolean hasChildren(WebElement node) {
        return node.findElements(By.xpath("./descendant-or-self::*")).size() > 1;
    }
    
        5
  •  0
  •   Saravanan Selvamohan    4 年前

    在Javascript中要执行的操作:

    var childElements = await element.findElements(By.xpath('.//*'));
        for (i = 0; i <= childElements.length; i++) {
            var elementId = await childElements[i].getAttribute("id");
            await console.log(elementId);
        }