如何在"驱动程序的帮助下使用父元素获取子元素。 findElement()。findElement()&#39 ;?

时间:2017-09-14 18:24:29

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

您可以在此处看到xpath1xpath2部分相同。我不想在两个相关场景中使用两个单独的xpath。我只能使用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());

我希望仅在ele2的帮助下获得xpath1

请建议我如何操作以及如何动态地在Div[5]中输入5。

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

4 个答案:

答案 0 :(得分:0)

要将元素用作父元素,您希望执行的操作类似于以下内容:

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选择器。

答案 1 :(得分:0)

  

请建议我怎么做以及如何动态地给Div [5]中的enter 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 :(得分:0)

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

或先使用孩子,然后转到父母

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

如果您查找一些xpath示例,那么有一个很好的cheatsheet here

答案 3 :(得分:0)

只需找到Parent元素,然后找到Child元素。

:t

而不是使用此

//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());