我正在尝试点击添加新按钮。但是它抛出一个错误,说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']
答案 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();