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

时间:2017-07-13 05:23:32

标签: java selenium arraylist selenium-webdriver firebug

FirePath返回9个匹配的节点,其中List返回18个元素。

  

操作系统 Win8 Pro,64位

     

Java :jdk1.8.0_77

     

Selenium 3.4.0(selenium-server-standalone)

     

GeckoDriver 0.17.0

     

浏览器 Mozilla Firefox 53.0

     

IDE Eclipse Neon.2发布(4.6.2)

     

FireBug 2.0.18

     

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

     

XPATH :// table [@id =&#39; ContentHolder_lbFeatures_LBT&#39;] / tbody / tr / td

我正在尝试从带有多个选择的列表框中获取项目数。当我在FireBug / FirePath中提供xpath时,它会返回&#34; 9个匹配的节点&#34;

enter image description here

继续,通过我的脚本,我通过findElements方法将WebElements添加到 WebElement 类型的泛型 列表中。接下来,当我为size()调用List<WebElement>方法时,它会返回 18 Elements

更新

(抱歉,在尝试缩小确切问题的同时,我在提出问题的过程中犯了一个错误)

这是完整的问题。

所需步骤:

  1. 访问网址。
  2. 点击Selection mode作为Multiple
  3. Phone features表格,我需要选择Blue ToothMemory Card SlotTouch screen。列表可能会有所不同,因此我希望将其保留在List<String>
  4. 这是我的剧本:

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

    你能帮我解释一下这里发生的错误吗?谢谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

网站刷新需要一两秒钟。 Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { // polling code handler.postDelayed(this, SIXTY_SECONDS); } };Handler.postDelayed(runnable, DELAY_TIME) ;`

xpath

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

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