WebDriver无法从JQuery下拉列表中进行选择

时间:2013-04-18 10:47:23

标签: java jquery selenium webdriver

我有一个包含JQuery下拉列表的Web表单。特定字段包含出生日期。该领域的来源是:

<div class="tooltipGroup" style="z-index:19;">
   <div class="day">
      <div class="jqTransformSelectWrapper" style="z-index: 19;">
      <div>
         <ul style="width: 100%; display: block; visibility: visible;">
          <li class="optHeading">
          <li class="undefined">
          <li class="undefined">
          <li class="undefined">
          <li class="undefined">
          <li class="undefined">
          <li class="undefined">
             <a index="6" href="#">6</a>
      </li>

         <li class="undefined">
             <a index="31" href="#">31</a>
       </li>

这是试图获取所有元素并将它们放在HashMap中的代码:

public void selectDob(int dob) {

        WebElement dobFieldDropdown;

        WebElement content = driver.findElement(By.className("leftClmn"));

        driver.findElement(By.id("aWrapper_dob_day")).click();

        dobFieldDropdown = content.findElements(By.className("tooltipGroup")).get(2).findElement(By.className("day")).findElement(By.tagName("ul"));

        HashMap<String, WebElement> dropdownValues = new HashMap<String, WebElement>();

        for (WebElement el : dobFieldDropdown.findElements(By.tagName("a"))) {
            dropdownValues.put(el.getText(), el);

            System.out.println(el.getText());
        }
        dropdownValues.get(dob).click();

    }

代码工作得很好但有一个例外:它无法获取所有字段的值,只是打开下拉列表时第一个可见的字段。

  

1 2 3 4 5

问题是如何获取其他字段的值?

3 个答案:

答案 0 :(得分:3)

我想感谢你们的帮助(特别是HemChe)。

事实证明,这是最新的FirefoxDriver版本2.32中的一个错误。相同的代码与ChromeDriver一起工作得很好,我得到了所有的drropdown值。将硒版本降级为2.31解决了这个问题,代码适用于两个驱动程序!

我将在Selenium bug跟踪器上注册一个错误!

这是我的代码的最终版本:

public void selectFromDropdown(String option) {

        WebElement dobFieldDropdown;

        WebElement content = driver.findElement(By.className("leftClmn"));

        driver.findElement(By.id("aWrapper_dob_day")).click();

        dobFieldDropdown = content.findElements(By.className("tooltipGroup")).get(2).findElement(By.className("day")).findElement(By.tagName("ul"));

        HashMap<String, WebElement> dropdownValues = new HashMap<String, WebElement>();

        for (WebElement el : dobFieldDropdown.findElements(By.tagName("a"))) {
            dropdownValues.put(el.getText(), el);

            System.out.println(el.getText().toString());
        }
        dropdownValues.get(option).click();

    }

干杯!

答案 1 :(得分:2)

尝试以下代码并检查它是否正常工作。

    WebElement w = driver.findElement(By.id("aWrapper_dob_day"));
    w.click();
    WebElement dobFieldDropdown = driver.findElements(By.className("undefined"));

    HashMap<String, WebElement> dropdownValues = new HashMap<String, WebElement>();

    for (WebElement el : dobFieldDropdown) {
        dropdownValues.put(el.getText(), el);

        System.out.println(el.getText());
    }

答案 2 :(得分:1)

您无法使用Web驱动程序找到不可见的元素,您需要使用JavaScript才能获取它们。所以尝试像

这样的东西
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("get them here by class name");