【问题标题】:element not visible: Element is not currently visible and may not be manipulated - Selenium webdriver元素不可见:元素当前不可见,可能无法操作 - Selenium webdriver
【发布时间】:2014-09-05 06:23:43
【问题描述】:

下面是html

<div id="form1:customertype" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all ui-state-hover" style="width: 165px;">
   <div class="ui-helper-hidden-accessible">
      <select id="form1:customertype_input" name="form1:customertype_input" tabindex="-1">
         <option value="S">Staff</option>
         <option value="C">Customer</option>
         <option value="N">New To Bank</option></select></div>
  <div class="ui-helper-hidden-accessible"><input id="form1:customertype_focus" name="form1:customertype_focus" type="text" readonly="readonly"></div>
  <label id="form1:customertype_label" class="ui-selectonemenu-label ui-inputfield ui-corner-all" style="width: 149px;">Staff</label>
  <div class="ui-selectonemenu-trigger ui-state-default ui-corner-right ui-state-hover"><span class="ui-icon ui-icon-triangle-1-s ui-c"></span></div></div>

class="ui-helper-hidden-accessible"的样式表是

ui-helper-hidden-accessible {
      border: 0;
      clip: rect(0 0 0 0);
      height: 0px;
      margin: -1px;
      overflow: hidden;
      padding: 0;
      position: absolute;
      width: 0px;
   }

以下是我的代码

    WebElement customerType = driver.findElement(By.id("form1:customertype_input"));
    Select select = new Select(customerType);
    select.selectByVisibleText("New To Bank");

当我尝试从下拉列表中选择“New to Bank”时,出现异常 元素不可见:元素当前不可见,可能无法操作 - Selenium webdriver

我尝试了 WebDriverWait 技术,但没用,有什么想法吗?

【问题讨论】:

  • 下拉菜单会打开吗?
  • 可能选择下拉列表已包装。这通常在创建爵士下拉菜单时发生。检查它是否真的被隐藏了。
  • 是的,手动打开下拉菜单,但不是从代码中打开。下拉菜单在页面上可见。
  • 尝试通过父 div 访问它:WebElement customerType = driver.findElement(By.Xpath("//div[@id='form1:customertype']//select[@id='form1 :customertype_input'])
  • 试过了,但结果是一样的。有趣的部分是它不会抛出异常,直到这一行 select.selectByVisibleText("New To Bank");

标签: selenium


【解决方案1】:

我不相信该选项的文本在您尝试选择它之前实际上是可见的。请尝试按值选择。

WebElement customerType = driver.findElement(By.id("form1:customertype_input"));
Select select = new Select(customerType);
select.selectByValue("N");

不过,您可能需要实际单击选择器才能选择选项。

WebElement customerType = driver.findElement(By.id("form1:customertype_input"));
new WebDriverWait(driver, 15).until(
            ExpectedConditions.elementToBeClickable(customerType));
customerType.click();

Select select = new Select(customerType);
select.selectByValue("N");

【讨论】:

    【解决方案2】:

    在创建Select的对象之前尝试执行点击customerType

    【讨论】:

    • same result :( 我在这一行遇到异常 select.selectByVisibleText("New To Bank");
    • 使用其他标识符点击内容的类似索引,将所有选项标签放在一个列表中并按索引号2选择以选择New To Bank选项
    【解决方案3】:

    好吧,我找到了解决问题的方法,但我对此并不满意。无论如何,我所做的都是专注于通过单击来控制下拉菜单的 div 元素,然后发送两次向下箭头键,然后按 Enter 键。这选择了我想要的选项。我使用了以下方法

    driver.switchTo().activeElement()
    

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,几个小时后我意识到浏览器试图在页面加载之前点击一个元素。

      所以我创建了一个睡眠来解决这个问题:

      sleep(1)
      

      P.S. - 这是一个我非常不喜欢的解决方案。 我只是指出你这样做的原因。 您可以做的最好的事情是检查您有问题的页面并尝试优化加载时间。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。我尝试了很多方法。
        最后,下面的python代码解决了这个错误。
        在选择选项之前,我使用 javascript 代码使元素可见。

        css = 'select#state' # css selector of the element
        js = """const data_options = Array.from(document.querySelectorAll('{css}'));
                data_options.forEach(a=>{{a.style='display:block;';}});""".format(css=css)
        self.driver.execute_script(js)
        

        也许对你有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 2018-09-17
          • 1970-01-01
          • 1970-01-01
          • 2018-12-03
          • 1970-01-01
          • 2015-06-08
          相关资源
          最近更新 更多