Java 元素可见且可单击时,Selenium web驱动程序无法单击按钮,抛出org.openqa.Selenium.elementNotInteractiableException
我尝试使用selenium web驱动程序测试以下菜单栏:Java 元素可见且可单击时,Selenium web驱动程序无法单击按钮,抛出org.openqa.Selenium.elementNotInteractiableException,java,html,scala,selenium,selenium-webdriver,Java,Html,Scala,Selenium,Selenium Webdriver,我尝试使用selenium web驱动程序测试以下菜单栏: <div class="text-center"> <div class="btn-group pull-left"> <button type="button" class="btn btn-default" id="id-home_prevButton" style="min-height:10px;min-width:10px" hidden="false"><span cla
<div class="text-center">
<div class="btn-group pull-left">
<button type="button" class="btn btn-default" id="id-home_prevButton" style="min-height:10px;min-width:10px" hidden="false"><span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>
</button><button type="button" class="btn btn-default" id="id-home_nextButton" style="min-height:10px;min-width:10px" hidden="false"><span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span></button>
</div>
<span class="span-title" id="id-home_title">Home</span>
<div class="btn-group pull-right">
<button type="button" class="btn btn-default" id="id-home_infoButton" hidden="false"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></button>
<div class="btn-group">
<button type="button" id="id-home_dropDownButton" class="btn btn-default dropdown-toggle" data-toggle="dropdown" hidden="false">
<i class="glyphicon glyphicon-align-justify"></i><span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right simple-title-dropdown" role="menu">
<li><a href="#home" id="id-home_menu_homeLink">Home</a></li>
</ul>
</div>
</div>
</div>
sbt控制台输出为:
22:49:11.378 [run-main-3] DEBUG com.example.selex.MWLExp$ - Find id-home_prevButton
22:49:11.539 [run-main-3] DEBUG com.example.selex.MWLExp$ - prevButton = wE.getTagName: button wE.getText: wE.getSize: (40, 34) wE.isDisplayed: true wE.isEnabled: true wE.isSelected: false
22:49:11.588 [run-main-3] DEBUG com.example.selex.MWLExp$ - id-home_prevButton.click
[error] (run-main-3) org.openqa.selenium.ElementNotInteractableException:
[error] Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
[error] System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
[error] Driver info: org.openqa.selenium.firefox.FirefoxDriver
[error] Capabilities [{moz:profile=/tmp/rust_mozprofile.T6j4aNCkep6a, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=51151.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
[error] Session ID: 1349d85f-d360-4725-963c-f6ec277e308c
org.openqa.selenium.ElementNotInteractableException:
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{moz:profile=/tmp/rust_mozprofile.T6j4aNCkep6a, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=51151.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
Session ID: 1349d85f-d360-4725-963c-f6ec277e308c
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82)
at com.example.selex.MWLExp$.run01(MWLExp.scala:92)
at simple.MainJVM$.main(DemoJVM.scala:44)
at simple.MainJVM.main(DemoJVM.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Selenium测试代码可以找到按钮,它被显示并启用,元素定位的可见性成功,但单击会抛出ElementNotInteractiableException
当我在没有selenium的情况下运行应用程序时,按钮是可见的,我可以单击它,它可以正常工作,没有任何错误
在selenium IDE中,单击按钮可以正常工作。单击按钮的Selenium IDE Java代码为:
def wEPrint(description: String, wE: WebElement): String = {
s"$description = wE.getTagName: ${wE.getTagName} wE.getText: ${wE.getText} wE.getSize: ${wE.getSize} wE.isDisplayed: ${wE.isDisplayed} wE.isEnabled: ${wE.isEnabled} wE.isSelected: ${wE.isSelected}"
}
...
log.debug("Find id-home_prevButton")
import org.openqa.selenium.support.ui.WebDriverWait
val waitPrevButton = new WebDriverWait(driver, 20)
val prevButton = driver.findElement(By.id("id-home_prevButton"))
log.debug(wEPrint("prevButton",prevButton))
waitPrevButton.until(ExpectedConditions.visibilityOfElementLocated(By.id("id-home_prevButton")))
log.debug("id-home_prevButton.click")
prevButton.click()
driver.findElement(By.id("id-home_prevButton")).click();
编辑
我稍微修改了代码:
import org.openqa.selenium.support.ui.WebDriverWait
val waitPrevButton = new WebDriverWait(driver, 20)
val prevButton = driver.findElement(By.id("id-home_prevButton"))
log.debug(wEPrint("prevButton",prevButton))
waitPrevButton.until(ExpectedConditions.visibilityOfElementLocated(By.id("id-home_prevButton")))
log.debug("id-home_prevButton.click")
//prevButton.click()
//prevButton.sendKeys(Keys.RETURN)
prevButton.sendKeys(Keys.ENTER)
现在例外信息是:
23:30:56.497 [run-main-6] DEBUG com.example.selex.MWLExp$ - Find id-home_prevButton
23:30:56.735 [run-main-6] DEBUG com.example.selex.MWLExp$ - prevButton = wE.getTagName: button wE.getText: wE.getSize: (40, 34) wE.isDisplayed: true wE.isEnabled: true wE.isSelected: false
23:30:56.798 [run-main-6] DEBUG com.example.selex.MWLExp$ - id-home_prevButton.click
[error] (run-main-6) org.openqa.selenium.ElementNotInteractableException: Element is not visible
[error] Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
[error] System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
[error] Driver info: org.openqa.selenium.firefox.FirefoxDriver
[error] Capabilities [{moz:profile=/tmp/rust_mozprofile.gBopOPHPUrCL, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=54936.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
[error] Session ID: eba7323c-6412-4ed7-a91f-3f897b3ec83f
org.openqa.selenium.ElementNotInteractableException: Element is not visible
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'tra', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{moz:profile=/tmp/rust_mozprofile.gBopOPHPUrCL, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.4.0-72-generic, moz:processID=54936.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
Session ID: eba7323c-6412-4ed7-a91f-3f897b3ec83f
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:150)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:115)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:45)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:96)
at com.example.selex.MWLExp$.run01(MWLExp.scala:93)
at simple.MainJVM$.main(DemoJVM.scala:44)
at simple.MainJVM.main(DemoJVM.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
所以现在它说元素是不可见的,尽管ElementLocated的visibilityOfElementLocated已经成功,并且显示并启用了它
出现此异常的原因是什么?如何修复
感谢您的支持。,如:
我可以解决这个问题。修改后的selenium代码如下:
import org.openqa.selenium.support.ui.WebDriverWait
val waitPrevButton = new WebDriverWait(driver, 20)
val prevButton = driver.findElement(By.id("id-home_prevButton"))
log.debug(wEPrint("prevButton",prevButton))
waitPrevButton.until(ExpectedConditions.visibilityOfElementLocated(By.id("id-home_prevButton")))
log.debug("id-home_prevButton.click")
//prevButton.click()
//prevButton.sendKeys(Keys.RETURN)
//prevButton.sendKeys(Keys.ENTER)
new Actions(driver).moveToElement(prevButton).click().perform()
这解决了这个问题,但我仍然想知道
elementnotinteractivatableexception
的原因,以及在成功的visibilityOfElementLocated
测试后“Element不可见”的原因。有什么想法吗?使用javascriptExecutor通过嵌入javascript来单击元素。通过使用javascript executor,我们可以在驱动程序上运行javascript
WebElement element = driver.findElement(By.id("id-home_prevButton");
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
这个问题将通过简单地使用隐式等待来解决,因为web页面完全加载页面,然后加载其find元素
driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS);获取驱动程序(“URL”)代码>我也有一个类似的问题,通过以下方式解决:
String id = element.getAttribute("id");
((JavascriptExecutor)driver).executeScript("$('#id').click();");
我遇到了同样的问题。我通过使用不同的Xpath捕获了相同的元素,并且成功了。我也不知道为什么。以下是我的情况:
//a[contains(text(),'%s')]
->不起作用
//a//span[包含(text(),'%s')]
->工作正常
这是我的HTML代码:
<a data-gtm-event="mbn-event-link" data-gtm-category="mbn-listing" data-gtm-action="home-category-l0-c3" href="/mua-ban-nha-dat-cho-thue-toan-quoc-l0-c3" title="Bất động sản ">
<span class="clearfix">
<span class="category-icon"><span class="icon icon-cat-3"></span></span>
<span class="category-name">Bất động sản</span>
</span>
</a>
<span class="clearfix">
<span class="category-icon"><span class="icon icon-cat-3"></span></span>
<span class="category-name">Bất động sản</span>
</span>
Bấtđộng sảN
这个问题有什么变化吗?在得到异常后,这个解决方案对我很有效。“”org.openqa.selenium.elementNotInteractivatableException:Element我的最终代码:String cssElm=target.getCssOrXPathSelector();WebDriver=getDriver();WebDriverWait wait=新的WebDriverWait(驱动程序,3);JavascriptExecutor js=((JavascriptExecutor)驱动程序);等待.直到(预期条件.元素的存在已定位(由.cssSelector(cssElm)));WebElement=driver.findElement(By.cssSelector(cssElm));js.executeScript(“参数[0].scrollIntoView(true);”,元素);((JavascriptExecutor)driver).executeScript(“参数[0]。单击();”,元素)代码>