2

我有一个带有 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

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

4

3 回答 3

3

我要感谢你们的帮助(尤其是 HemChe)。

原来这是最新的 FirefoxDriver 2.32 版本中的一个 bug。相同的代码在 ChromeDriver 上工作得很好,我已经得到了所有的下拉值。将 selenium 版本降级到 2.31 解决了这个问题,并且代码适用于两个驱动程序!

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

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

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

    }

干杯!

于 2013-04-22T07:35:45.010 回答
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());
    }
于 2013-04-18T12:15:27.880 回答
1

您无法使用 Web Driver 定位不可见元素,您需要使用 JavaScript 才能获取它们。所以尝试类似的东西

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("get them here by class name");
于 2013-04-18T10:55:36.627 回答