当前位置: 首页 > 面试题库 >

Webdriver findElements通过xpath

阴鸿才
2023-03-14
问题内容

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
 }

问题答案:

你的问题:

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]

等等。



 类似资料:
  • 问题内容: 以下是我运行时遇到的错误: 问题答案: 在没有空格的路径中创建您的virtualenv环境。这就是为什么它发生的原因: 创建环境时,它会建立一个目录。在该目录中是与环境有关的所有可执行文件。有些是脚本。如您所知,hashbang用来告诉系统使用什么解释程序来运行脚本。您可能经常在脚本顶部看到此信息: 如果脚本位于,则告诉系统运行以下命令来执行脚本: 就您而言,virtualenv正在创

  • 问题内容: 大家好,我正尝试通过websockets发送javascript对象: faye-websockets文档说: send(message) 接受字符串或缓冲区,并通过连接向另一对等方发送文本或二进制消息。 服务器端我正在使用node和faye。 客户端: 我的错误是什么?谢谢 问题答案: WebSockets支持发送和接收:字符串,类型数组(ArrayBuffer)和Blob。发送之前

  • 问题内容: 我正在尝试通过网络连接到MySQL数据库。我已经安装了MySQL,并且该服务在默认端口上运行。我还将SQL连接器安装到jar文件中,并将Java JDK添加到服务器计算机中。我可以使用以下代码连接到本地数据库: 但是,当我尝试通过IP地址(例如:192.168.1.45)通过网络连接到它时: 我收到连接错误: 有人知道这个问题是什么吗?我需要添加其他地址吗?我已经使用地址添加了默认端口

  • 问题内容: 在.Net中,我发现了一个很棒的库HtmlAgilityPack,它使您可以使用XPath轻松解析格式不正确的HTML。我已经在.Net站点中使用了几年,但是我不得不为我的Python,Ruby和其他项目选择更痛苦的库。有人知道其他语言的类似库吗? 问题答案: 在python中,ElementTidy解析标记汤并生成一个元素树,该树允许使用XPath进行查询:

  • 我想在登录时向特定用户发送通知,我使用Firebase消息,我可以通过控制台发送通知,但我想使用发送到主题和request以Swift代码发送此通知。当我在postman中运行代码时,我无法实现http请求以发送通知。我有以下错误: 请求缺少身份验证密钥(FCM令牌)。请参阅FCM文档的“认证”部分,网址为https://firebase.google.com/docs/cloud-messagi

  • 5.4 通过 HTTPS 的通信 大多数智能手机应用都与互联网上的 Web 服务器通信。 作为通信的方法,我们在这里集中讨论 HTTP 和 HTTPS 的两种方法。 从安全角度来看,HTTPS 通信更为可取。 最近,Google 或 Facebook 等主要 Web 服务已经开始使用 HTTPS 作为默认设置。 自 2012 年以来,Android 应用中 HTTPS 通信实现的许多缺陷已被指出。