Selenium-Java-FireBug:FirePath returns 9 个匹配节点,其中 List<WebElement> 返回 18 个元素

Selenium-Java-FireBug : FirePath returns 9 matching nodes where as List<WebElement> is returning 18 elements

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

OS: Win8 Pro, 64 bit

Java: jdk1.8.0_77

Selenium: 3.4.0 (selenium-server-standalone)

GeckoDriver: 0.17.0

Browser: Mozilla Firefox 53.0

IDE: Eclipse Neon.2 Release (4.6.2)

FireBug: 2.0.18

URL: https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx

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

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

继续前进,通过我的脚本,我将 WebElements 添加到类型为 WebElement[=] 的 generic List 中60=] 通过 findElements 方法。接下来,当我为 List<WebElement> 调用 size() 方法时,它 returns 我 18 Elements

更新:

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

这是完整的问题。

所需步骤:

  1. 访问URL。
  2. 点击 Selection mode 作为 Multiple
  3. Phone featurestable,我需要selectBlue ToothMemory Card SlotTouch screen。列表可能会有所不同,所以我想将其保存在 List<String>.

这是我的脚本:

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();
            }
        }
    }
}

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

站点刷新需要一两秒钟。 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());