1)我正在做一个教程来展示xpath的findElements是如何工作的。我想知道为什么它返回<div>带有attribute元素之后的所有文本id=container。
<div>
id=container
xpath的代码: By.xpath("//div[@id='container']
By.xpath("//div[@id='container']
2)我应该如何修改代码,使其仅返回跟随父注释的第一个或前几个节点,例如第一个节点(如“ Home”),第一个节点(如Home,手动测试和自动化测试)。
感谢您的建议和帮助!
这是本教程的代码片段:
import java.util.List; import org.junit.Test; import org.junit.Before; import org.junit.After; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class WD_findElements { @Test public void test_byxpath(){ WebDriver driver = new FirefoxDriver(); try{ driver.get("http://www.hexbytes.com"); List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']")); System.out.println("Test7 number of elements: " + elements.size()); for(WebElement ele : elements){ //ele.sendKeys("hexbyes"); System.out.println(ele.getText()); //System.out.println(ele.getAttribute("id")); //System.out.println(ele.getTagName()); } } finally { driver.close(); } }//end of test_byxpath public void xpathDemo2() { WebDriver driver = new FirefoxDriver(); try{ driver.get("http://www.hexbytes.com"); WebElement webelement = driver.findElement(By.id("container")); //matching single element with attribute value=container System.out.println("The id value is: " + webelement.getAttribute("id")); System.out.println("The tag name is: " + webelement.getTagName()); } finally { driver.close(); } }//end of xpathDemo2 public void xpathDemo3() { WebDriver driver = new FirefoxDriver(); try{ driver.get("http://www.hexbytes.com"); //find first child node of div element with attribute=container List<WebElement> elements = driver.findElements(By.xpath("//div[@id='container']/*[1]")); System.out.println("Test1 number of elements: " + elements.size()); for(WebElement ele : elements){ System.out.println(ele.getTagName()); System.out.println(ele.getAttribute("id")); System.out.println(""); System.out.println(""); } } finally { driver.close(); } }//end of xpathDemo3 }
你的问题:
Q 1.)我想知道为什么它返回div之后的所有文本? 它不应该,我认为不会。它返回所有具有“ id”属性值等于“ containter”的div(及其所有子级)。但是,您要使用ele.getText() Where getText 打印结果,其中getText将返回结果所有子级的所有文本内容。
ele.getText()
获取此元素(包括子元素)的可见(即未被CSS隐藏),没有任何前导或尾随空格。 返回: 此元素的innerText。
Q 2.)我应该如何修改代码,使其仅返回跟随父注释的第一个或前几个节点。 这并不是很清楚您要查找的内容。例:
<p1> <div/> </p1 <p2/>
div的父级以下是p2。这将是:
//div[@id='container'][1]/parent::*/following-sibling::*
或更短
//div[@id='container'][1]/../following-sibling::*
如果您只在寻找第一个扩展区,则带“谓词”的表达式(例如[1]--第一个扩展区或[position() < 4]前三个)。
[1]
[position() < 4]
如果您正在寻找第一个div的第一个孩子:
//div[@id='container'][1]/*[1]
如果只有一个ID为的div,则您正在寻找第一个孩子:
//div[@id='container']/*[1]
等等。