赵大笨笨 2024-02-05 11:40 采纳率: 0%
浏览 6

WebElement的findElements循环每次都是第一个元素

img


我想获取id为J_goodsList的div下的li进行循环,然后获取p-name的内容,但是为什么每次循环获取的内容都是第一个元素的。
是xpath写的不对吗?代码如下

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-05 11:41
    关注

    引自免费微信小程序:皆我百晓生

    当然,我很乐意帮你解决这个问题。你提到的问题是在使用Selenium WebDriver时,通过findElements方法获取一组元素后,在循环中始终只获取到第一个元素的文本内容。根据你的描述,你可能是这样写的:

    @FindBy(xpath = "//*[@id='J_goodsList']/li")
    List<WebElement> goodsListItems;
    
    // ...
    
    for (WebElement item : goodsListItems) {
        String productName = item.findElement(By.xpath(".//p[@class='name']")).getText();
        System.out.println(productName);
    }
    

    问题可能并不在于xpath表达式,而是每次循环中对每个WebElement都执行了新的查找操作(即.findElement(By.xpath(".//p[@class='name']")))。这将导致每次都从当前遍历到的WebElement内部重新查找第一个匹配的p.name元素。

    正确的做法是直接在找到的所有li元素上获取对应的p.name元素的文本。以下是修正后的代码示例:

    @FindBy(xpath = "//*[@id='J_goodsList']/li")
    List<WebElement> goodsListItems;
    
    // 确保在页面加载完成后执行以下操作
    public void printAllProductNames() {
        for (WebElement item : goodsListItems) {
            WebElement productNameElement = item.findElement(By.xpath(".//p[@class='name']"));
            if (productNameElement != null) {
                String productName = productNameElement.getText();
                System.out.println(productName);
            } else {
                System.out.println("No product name found for this item.");
            }
        }
    }
    

    如果上述修正方案仍然不能解决问题,请确认HTML结构中确实存在多个具有相应类名或属性的p元素,并且它们位于#J_goodsList下的不同li元素内。同时,确保页面已完全加载,所有元素均可见后再执行查找和循环操作。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月5日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?