【问题标题】:Selenium webdriver: Dropdown element selection throws Element not visible exceptionSelenium webdriver:下拉元素选择抛出元素不可见异常
【发布时间】:2017-01-12 14:09:36
【问题描述】:

我正在使用 Selenium 和 Java Webdriver,而且我是 Selenium 的新手。 我有一个与Thread 类似的问题,我尝试了几种方法。我只想获取此下拉列表的第一个元素(它将很快变得更长)并选择它以使用 junit 测试输入掩码。 这是网站的sn-p:

<md-option ng-repeat="customer in settingsCtrl.customers" value="1" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="true" id="select_option_4" style="" selected="selected">
<div class="md-text ng-binding">FirstCustomer</div>
<div class="md-ripple-container" style=""></div>
</md-option>

我尝试了以下操作:

WebDriverWait wait = new WebDriverWait(driver, 300);

    WebElement customer = driver.findElement(By.id("select_option_4"));
    //customer.click();

    //wait.wait();

    List <WebElement> rows = customer.findElements(By.tagName("div"));
    System.out.println("row size: " + rows.size());
    // Debug text
    Iterator<WebElement> i  = rows.iterator();
    while(i.hasNext()){
        WebElement row = i.next();
        System.out.println("row text: " + row.getText() );

    }
    rows.get(0).click();

错误消息与线程中的一样:ElementNotVisibleException

有什么建议吗?

【问题讨论】:

  • 错误在哪里抛出?
  • rows.get(0).click();

标签: java selenium selenium-webdriver


【解决方案1】:

我认为在rows.get(0).click() 之后,下拉菜单将被关闭,这就是您收到错误消息的原因。

如果要从下拉列表中获取所有文本,请在我上面提到的代码行之前进行

【讨论】:

  • 我删除了导致一些错误的 customer.click(),但你完全正确:) getText() 在我的控制台中仍然显示为空...行大小为 1
  • 为了调试,不打印文本,或许你可以打印每一行的outerHtml来看看你得到了什么:row.getAttribute("outerHTML")
  • 同时检查outerHTML of customer
  • 啊,好的提示谢谢 :) 似乎也适合客户
    FirstCustomer
  • hmm.. 如果你得到customer 的正确 html(里面有 2 个 div:s?),我想不出为什么行大小可以是 1。
【解决方案2】:

您是否尝试过将下拉菜单视为选择 web 元素?

选择 custDrop = new Select(driver.findElement(By.id("select_option_4")));

列出行 = custDrop.getAllSelectedOptions();

那么所有的下拉值都在 rows 字符串数组中。

如果你只想选择第一个选项,不管:

custDrop..selectByIndex(0);

如果您提前知道它们是什么,也可以按值或可见文本进行选择。

【讨论】:

  • 是的,我之前尝试过,但我得到了 UnexpectedTagNameException: Element should have been "select" but was "md-option"
  • 那是我的错,我没有在原始 HTML 代码中发现这一点。除了尝试使用 sendKeys 下拉列表框而不是单击之外,我没有其他想法?我不确定,但可能会发送一个向下箭头,因为您的最终目标只是始终选择第一个可用选项。
【解决方案3】:

使用下面的函数来验证元素是否在页面上可见。

isDisplayed()

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多