我有一个包含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
问题是如何获取其他字段的值?
答案 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");