【问题标题】:How to get child element with parent element with the help of "driver. findElement().findElement()'?如何借助“driver.findElement().findElement()”获取父元素的子元素?
【发布时间】:2018-02-23 20:13:54
【问题描述】:

在这里您可以看到xpath1xpath2 部分相同。我不想在两个相关场景中使用两个单独的 xpaths。我只能使用xpath1

String xpath1="//div[@id='name']";  //parent element
String xpath2="div[@id='name']/div[5]"; //child element
WebElement ele1=driver.findElement(By.xpath("xpath1"));
WebElement ele2=driver.findElement(By.xpath("xpath1")).finElement(By.xpath());

我只想在xpath1 的帮助下获得ele2

请建议我如何做以及如何在Div[5]dynamically 中输入 5。

driver.findElement().findElement();是什么概念?

【问题讨论】:

  • “动态在 Div[5] 中输入 5 是什么意思?你知道那个索引是通过其他方式吗?
  • 意味着我必须在从其他元素获取后发送索引值。

标签: java selenium xpath selenium-webdriver selenium-grid


【解决方案1】:

要将一个元素用作父元素,您需要执行以下操作:

WebElement ele1 = driver.findElement(By.xpath("xpath1")); //parent element
WebElement ele2 = ele1.findElement(By.xpath("./div[5]")); // child - note "./" very important

不完全确定您所说的“div [5]”是什么意思,但我之前所做的是抓取所有元素,然后遍历它们以获得正确的索引。例如:

int  i = 0;
List<WebElement> elements  = driver.findElements(By.Xpath("xpath"));
for (i; i < elements.size(); ++i) {
    if (elements.text().equals("blah") 
         break;
}

WebElement el2 = el1.findElement(By.Xpath("./div[" + i + "]")); 
...
... 

无论如何,通常不建议使用该符号,因为它很容易更改。理想情况下,您希望在没有 id 的情况下使用更强大的 xpath 或 css 选择器。

【讨论】:

    【解决方案2】:

    请建议我如何做以及如何动态输入 Div[5] 中的 5。

    这边?我完全不明白。

    String xpath1 = "//div[@id='name']";  //parent element
    String xpath2 = "/div[5]"; //child element
    WebElement ele2=driver.findElement(By.xpath(xpath1)).finElement(By.xpath(xpath2));
    

    而driver.findElement().findElement();是什么概念?

    在第一个元素之后,您可以将WebElement 用作 HTML/XML 根页面,并且仍然可以查询它以查找更多元素。如果您需要查询一个节点并且它们的子节点超过 2 次或 3 次,而无需重复基节点路径查询,这将非常有用。

    【讨论】:

      【解决方案3】:
      WebElement ele1 = driver.findElement(By.Id("name")); //for your parent element
      WebElement ele2 = ele1.findElement(By.xpath("./div[5]")); // your child element
      

      WebElement ele1 = driver.findElement(By.xpath("xpath1")); //for your parent element
      WebElement ele2 = ele1.findElement(By.xpath("./div[position()=5]")); // your child element
      

      WebElement ele1 = driver.findElement(By.xpath("xpath1")); //for your parent element
      WebElement ele2 = ele1.findElement(By.xpath("./child::div[5]")); // your child element
      

      或者先用child,再去parent

      WebElement ele1 = driver.findElement(By.xpath("xpath2")); //for child element
      WebElement ele2 = driver.findElement(By.xpath(xpath2 + "/parent::*")); // your parent element
      

      如果您寻找一些 xpath 示例,您有一个不错的 cheatsheet here

      【讨论】:

        【解决方案4】:

        只需找到父元素,然后找到子元素。

        //parent element locator
        WebElement ParentElement = driver.findElement("your locator")); 
        
        //Child element locator
        WebElement ChildElement = ParentElement.findElement("your locator")); 
        

        而不是使用这个

        String xpath1="//div[@id='name']";  //parent element
        String xpath2="//div[@id='name']/div[5]"; //child element
        WebElement ele1=driver.findElement(By.xpath("xpath1"));
        WebElement ele2=driver.findElement(By.xpath("xpath1")).finElement(By.xpath());
        

        使用这个:

        String xpath1="//div[@id='name']";  //parent element
        String xpath2="./div[5]"; //child element
        WebElement ele1 = driver.findElement(By.xpath(xpath1));
        WebElement ele2 = ele1.findElement(By.xpath(xpath2));
        

        【讨论】:

          猜你喜欢
          • 2013-06-13
          • 2019-02-19
          • 1970-01-01
          • 2013-08-28
          • 2016-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多