一尘不染

Webdriver findElements通过xpath

selenium

1)我正在做一个教程来展示xpath的findElements是如何工作的。我想知道为什么它返回<div>带有attribute元素之后的所有文本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
 }

阅读 491

收藏
2020-06-26

共1个答案

一尘不染

你的问题:

Q 1.)我想知道为什么它返回div之后的所有文本?
它不应该,我认为不会。它返回所有具有“ id”属性值等于“ containter”的div(及其所有子级)。但是,您要使用ele.getText()
Where getText 打印结果,其中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() &lt; 4]前三个)。

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

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

如果只有一个ID为的div,则您正在寻找第一个孩子:

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

等等。

2020-06-26