【问题标题】:Selenium-Java-FireBug : FirePath returns 9 matching nodes where as List<WebElement> is returning 18 elementsSelenium-Java-FireBug :FirePath 返回 9 个匹配节点,其中 List<WebElement> 返回 18 个元素
【发布时间】:2023-03-27 18:31:01
【问题描述】:

FirePath 返回 9 个匹配节点,而 List 返回 18 个元素。

操作系统Win8 Pro,64 位

Java:jdk1.8.0_77

Selenium3.4.0(selenium-server-standalone)

GeckoDriver0.17.0

浏览器Mozilla Firefox 53.0

IDEEclipse Neon.2 版本 (4.6.2)

FireBug2.0.18

网址https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx

XPATH: //table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td

我正在尝试从 多选列表框 中获取项目数。当我在 FireBug/FirePath 中提供 xpath 时,它返回给我“9 个匹配节点”

继续前进,通过我的脚本,我通过findElements 方法将 WebElements 添加到类型为 WebElementgeneric List 中。接下来,当我为List&lt;WebElement&gt; 调用size() 方法时,它返回了我18 Elements

更新:

(抱歉,我在试图缩小到确切问题的范围时,以确切的步骤提出问题时犯了一个错误)

这是完整的问题。

所需步骤:

  1. 访问网址。
  2. 点击Selection mode作为Multiple
  3. Phone features 表中,我需要选择Blue ToothMemory Card SlotTouch screen。列表可能会有所不同,因此我想将其保存在 List&lt;String&gt; 中。

这是我的脚本:

package demo;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Q45065876_keyDown {

    public static void main(String[] args) {


        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        driver.navigate().to("https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx");

        driver.findElement(By.xpath("//input[@id='ContentHolder_lbSelectionMode_I']")).click();
        List<WebElement> selection_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbSelectionMode_DDD_L_LBT']/tbody/tr/td"));
        for (WebElement ele:selection_list)
        {
        if(ele.getAttribute("innerHTML").contentEquals("Multiple"))
            ele.click();
            break;
        }
        driver.findElement(By.id("ContentHolder_lbSelectionMode_DDD_L_LBI1T0")).click();
        List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"));
        System.out.println("Number of Elements : "+phone_feature_list.size());
        List<String> item_list = new ArrayList<String>();
        item_list.add("Bluetooth");
        item_list.add("Memory Card Slot");
        item_list.add("Touch screen");
        System.out.println("Number of Elements : "+item_list.size());

        for (int i=0; i<phone_feature_list.size(); i++)
        {
            WebElement my_element = phone_feature_list.get(i);
            String innerhtml = my_element.getAttribute("innerHTML");
             System.out.println("INNER HTML : "+innerhtml);
            for (int j=0; j<item_list.size(); j++)
            {
                item_list.get(j).contentEquals(innerhtml);
                my_element.click();
            }
        }
    }
}

你能帮我理解这里发生了什么问题吗?谢谢大家的帮助。

【问题讨论】:

  • 对我来说,firepath 只返回 18 个元素。
  • 对我来说,chrome 和 firepath 也返回 18
  • 哦,即使是 XpathChecker 也会在这里返回 9!!!
  • @Murthi Firefox 和 FireBug 版本?
  • @DebanjanB 你的 firepath 版本是什么?我的 firepath 版本是 0.9.7.1.1,firebug 是 2.0.19

标签: java selenium arraylist selenium-webdriver firebug


【解决方案1】:

网站刷新需要一两秒钟。 xpath

"//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"

包括这些复选框,因此您将获得 18 个结果。你可以等到有不同数量的结果

List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"));
int size = phone_feature_list.size();

// choose an option from the dropdown

// wait for the size to change
while ((phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"))).size() == size);

System.out.println("Number of Elements : " + phone_feature_list.size());

【讨论】:

  • 非常感谢。您能否再次查看更新后的问题。 (抱歉,之前我在尝试缩小到确切问题的范围时提出问题时犯了一个错误)
  • 嗯,你的回答给了我一些新的想法和新的维度来锻炼解决这个问题的解决方案。非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 2015-04-29
  • 2013-02-15
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
相关资源
最近更新 更多