【问题标题】:Scroll a div tags list using webdriver使用 webdriver 滚动 div 标签列表
【发布时间】:2013-09-05 12:35:15
【问题描述】:

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

下拉列表不是用select标签写的。它更像是一个列表。该列表首先显示为选择器按钮。当它被点击时,它会显示一个可以滚动的列表。该列表是使用 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>
.
.
.
.

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

【问题讨论】:

    标签: html selenium scroll selenium-webdriver


    【解决方案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。希望这可以帮助您制定解决方案。

    【讨论】:

    • 感谢您的回复。下拉列表不使用选择标签写入。它更像是一个列表。该列表首先显示为选择器按钮。当它被点击时,它会显示一个可以滚动的列表。该列表是使用 div 标签编写的。
      Text1
      Text2
      。 . . .
    • 不幸的是,当我手动尝试时,它不会响应箭头键。所以,我猜它不会响应上面的代码。使选项可见的唯一方法是使用鼠标向下滚动。
    • 我们可以使用鼠标滚动来滚动下拉列表,然后点击所需的选项
    • 你为什么不写代码来做同样的事情呢?有什么问题?
    • 我不知道向下滚动列表的代码。 window.scrollBy(x,y) 或 element.scrollBy(x,y) 不起作用
    【解决方案2】:

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

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

    你也可以

    1. 点击选择器按钮
    2. 选择包含列表的元素并使用 (string allOptions = myElement.Text;)
    3. 查看它是否在列表中(bool textFound = allOptions.Contains("what I'm looking for");)

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签