java - Webdriver findElements 通过 xpath

标签 java selenium xpath selenium-webdriver webdriver

1)我正在做一个教程来展示 findElements By xpath 是如何工作的。我想知道为什么它会返回 <div> 之后的所有文本具有属性 id=container 的元素.

xpath 代码: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”属性值等于“container”的 div(以及它的所有子元素)。但是您正在使用 ele.getText() 打印结果 其中 getText 将返回结果的所有子项的所有文本内容。

获取此元素(包括子元素)的可见(即未被 CSS 隐藏)innerText,没有任何前导或尾随空格。
返回:
此元素的 innerText。

问题 2.) 我应该如何修改代码,以便它只返回父注释后面的第一个或前几个节点
这不是很清楚你在找什么。 示例:

<p1> <div/> </p1 <p2/> 

div 的父级是p2。 这将是:

 //div[@id='container'][1]/parent::*/following-sibling::* 

或更短

 //div[@id='container'][1]/../following-sibling::* 

如果您只是在寻找第一个带有“谓词”的表达式 (例如 [1] - 对于第一个。或 [position() < 4] 对于前三个)

如果您正在寻找第一个 div 的第一个子元素:

//div[@id='container'][1]/*[1]

如果只有一个带有 id 的 div 并且您正在寻找第一个 child :

   //div[@id='container']/*[1]

等等。

关于java - Webdriver findElements 通过 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16361535/

相关文章:

java - java中的递归函数 - N个具有变化索引的嵌套循环

java - 如何使用运行apache的eclipse连接到mysql

java - 如何在 Java 中创建列表

java - 无法使用 Selenium Webdriver 在 MAC 上最大化 Safari 浏览器

java - Selenium 和 AssertTrue() 连接

css - 使用 nightwatch 单击按标签列表中的子元素

Java多线程: How to use multi-threading in different ArrayList containing record info?

Selenium:是否有任何可以与 Selenium Server/RC 集成的 JS(JavaScript)代码覆盖工具

java - 在 DOM 中联合 NodeList (java)

php - 使用 XPath 获取最高值节点