1

我们有一个使用 div 标签编写的下拉列表。Selenium 无法识别不在显示中的元素并引发错误。使用 JS 代码滚动 - .scrollBy(0,y) 选项在这里不起作用。

下拉列表不使用选择标签写入。它更像是一个列表。该列表首先显示为选择器按钮。当它被点击时,它会显示一个可以滚动的列表。该列表是使用 div 标签编写的。

<div id="xxx_pickerMenuItem1" type = "button">
    <div id = "xxx_pickerMenuItem1_text">Text1</div>
<div>
<div id="xxx_pickerMenuItem2" type = "button">
    <div id = "xxx_pickerMenuItem2_text">Text2</div>
<div>
.
.
.
.

有没有办法向下滚动列表并检查是否显示所需的元素?

4

2 回答 2

1

只需将您的 WebElement 包装到 Select Object 中,如下所示

Select dropdown = new Select(driver.findElement(By.id("identifier")));

完成此操作后,您可以通过 3 种方式选择所需的值。考虑一个这样的 HTML 文件

<html>
<body>
<select id = "designation">
<option value = "MD">MD</option>
<option value = "prog"> Programmer </option>
<option value = "CEO"> CEO </option>
</option>
</select>
<body>
</html>

现在要识别下拉菜单

Select dropdown = new Select(driver.findElement(By.id("designation")));

要选择它的选项说'程序员'你可以做

dropdown.selectByVisibleText("Programmer ");

或者

dropdown.selectByIndex(1);

或者

dropdown.selectByValue("prog");

如果该值不存在,您将获得 WebDriverException !

编辑:下拉列表是使用 div 的

driver.findElement(By.name("applicantContact.areaOfOd")).click()
driver.findElement(By.name("applicantContact.areaOfOd")).sendKeys(
                            Keys.ARROW_DOWN);
driver.findElement(By.name("applicantContact.areaOfOd")).sendKeys(
                            Keys.ARROW_DOWN);
driver.findElement(By.name("applicantContact.areaOfOd")).sendKeys(Keys.ENTER);

上面的代码确实单击了元素,然后按两次向下箭头,然后按 Enter。希望这可以帮助您制定解决方案。

于 2013-09-02T12:09:34.757 回答
0

尝试弄清楚如何在不使用箭头或滚动按钮的情况下进行选择。通常,您可以单击按钮然后开始输入以快速选择列表中的正确项目。在硒中,这将是这些步骤......

  1. 单击选择器按钮
  2. 选择 div 列表并使用“SendKeys”并键入显示的确切文本。如果您需要点击回车来选择您想要的项目,您可以发送一个“\n”。此外,您可能需要先对其进行焦点事件。
  3. 现在已经选择了该项目,您可以简单地获取所选项目的 .Text 。

或者,您可以

  1. 单击选择器按钮
  2. 选择包含列表的元素并使用 (string allOptions = myElement.Text;)
  3. 看看它是否在列表中(bool textFound = allOptions.Contains("what I'm looking for");)
于 2013-09-04T23:28:10.650 回答