org.openqa.selenium.ElementNotVisibleException:尝试通过硒单击元素时元素不可交互

时间:2019-02-09 17:28:22

标签: java selenium selenium-webdriver xpath css-selectors

我正在尝试点击添加新按钮。但是它抛出一个错误,说org.openqa.selenium.ElementNotVisibleException:元素不可交互

<div id="left-tabs-example-pane-metastore" aria-labelledby="left-tabs-example-tab-metastore" role="tabpanel" aria-hidden="false" class="fade tab-pane active in">
   <div class="title col-sm-12"><button class="custom-btn create-new-button" style="float: right;">Add New</button></div>
   <div class="test_table custom-test_table">
      <div class="divTable">
         <div class="divTableHeading">
            <div class="row" style="margin: 0px 3px; border-bottom: 1px solid rgb(221, 221, 221); padding: 15px;">
               <div class="col-sm-3">Name</div>
               <div class="col-sm-3">Created by</div>
               <div class="col-sm-3">Created on</div>
               <div class="col-sm-2">Status</div>
               <div class="col-sm-1">Actions</div>
            </div>
         </div>
         <div class="divTableBody">
            <div class="row" style="margin: 0px 3px; border-bottom: 1px solid rgb(221, 221, 221); padding: 15px;">
               <div class="col-md-3" title="beta-stage-metastore" style="text-overflow: ellipsis; display: inline-block; white-space: nowrap; overflow: hidden;"><a href="#/projects/p-b48010e4-873a-4c4b-9c71-10235dfc8cf0/resources/rds-3e5e6b92-0d59-4485-bf7a-e6965eb7f9f8/details">beta-stage-metastore</a></div>
               <div class="col-md-3">betaorg-admin</div>
               <div class="col-md-3">9th February at 13:17 hrs</div>
               <div class="col-md-2" style="overflow-wrap: break-word;">STOPPED</div>
               <div class="col-sm-1">
                  <span class="dropdown custom_dropdown option-custom_dropdown" style="border-right: none;">
                     <a href="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img src="images/more.png"></a>
                     <ul class="dropdown-menu">
                        <li><a>Start</a></li>
                     </ul>
                  </span>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>

我尝试了以下操作:

driver.findElement(By.cssSelector(".custom-btn.create-new-button")).click();
使用Chrome扩展程序生成的

添加新按钮的

Xpath是:

/html/body/div[@id='app']/div[@class='_loading-overlay']/main/div[@class='container-fluid search_table_container']/div[@class='col-md-12 test_tab_wrapper']/div[@class='test_subtab_container']/div[@id='left-tabs-example']/div[@class='col-sm-12'][2]/div[@class='tab-content']/div[@id='left-tabs-example-pane-resources']/div/div[@class='workflowtab_box']/div[@class='row vertical_tab_panel_container']/div[@id='left-tabs-example']/div[@class='col-sm-9']/div[@class='tab-content']/div[@id='left-tabs-example-pane-metastore']/div[@class='title col-sm-12']/button[@class='custom-btn create-new-button']

4 个答案:

答案 0 :(得分:1)

基本上,有四个原因导致元素不可交互。

1)计时-元素加载所需的时间。为此,您需要检查如何使用隐式显式等待

2)检查元素是否在框架中。为此,请切换到框架。

3)定位器不正确

4)错误的响应方式实施。这仍然源于3)。某些网站仅针对移动版和网络版启用了一个代码。因此,当您检查xxxxx.size时,该元素将具有多个实例。您将需要在列表中搜索显示为!= none的列表。然后,可以将元素的位置附加到xpath或正在使用的任何定位器上。例如。 xxxx / yyyyy / zzzz [3](如果列表中的位置为4)。

将此代码用于Java, 假设条件  a)定位器类型为id  b)列表的名称为nameOfYourElements

列表nameOfYourElements = wd.findElements(By.id(“ nameOfYourID”));   System.out.println(nameOfYourElements.size());

答案 1 :(得分:0)

请给网络驱动程序一些等待时间以显示该元素。请尝试此操作。

    WebDriverWait wait = new WebDriverWait(driver, 40);          
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/button[@class='custom-btn create-new-button']"))).click();

答案 2 :(得分:0)

尝试使用xpath:driver.findElement(By.xpath("//button[text()='Add New']"));

请检查该元素是否在iframe中。如果是,那么您需要首先切换到iframe,然后单击该元素,以切换到iframe,您可以参考:How to handle iframe in Selenium WebDriver using java

如果它不在iframe中,则可以使用上述xpath直接单击元素。

答案 3 :(得分:0)

要单击文本为添加新的元素,可以使用以下任一解决方案:

  • cssSelector

    driver.findElement(By.cssSelector("div.tab-content>div#left-tabs-example-pane-metastore>div.title>button.custom-btn create-new-button")).click();
    
  • xpath

    driver.findElement(By.xpath("//div[@class='tab-content']/div[@id='left-tabs-example-pane-metastore']/div[contains(@class, 'title')]/button[@class='custom-btn.create-new-button' and text()='Add New']")).click();