我需要在IE11上测试一个网站,所以我用IEDriver做了一个硒测试项目。我也使用 Maven。在本地一切正常,我现在必须使用 Jenkins 来启动我的测试。
我创建了一个简单的工作来尝试我的一个测试。Jenkins 找到我的 pom.xml,用 IEDriver 打开浏览器,导航到我的 url,然后问题就开始了。
我的测试在本地运行时做了什么:
- 点击“欢迎界面”进入下一页;
使用 3 个断言检查新页面上的两个元素:
1) element1.getText().trim().equalsIgnoreCase(myText1);
2) element2.getText().trim().equalsIgnoreCase(myText2);
3) element2.isEnabled();
点击element2进入下一页;
- 检查其他元素。
通过 Jenkins 启动时我的测试做了什么:
- 点击“欢迎界面”进入下一页;=> 这没关系,但很简单,因为这个页面只包含 1 个占据整个屏幕的元素
未能检查 2 个元素:
1) 为假,element1.getText() 为空
2) 为假,element2.getText() 为空
3) 是真的
如果我删除断言并尝试直接单击 element2,我有一个 ElementNotInteractableException
当出现错误时,我会捕获任何异常以获取屏幕截图。在这里,屏幕截图只是一个黑屏。
所以据我了解,当与 Jenkins 一起启动时,Selenium“知道”页面上有一些元素(=> element2.isEnabled() 是真的),但没有“看到”它们(=> element2.getText()是空的)并且无法与它们交互,就好像它们在黑屏“后面”并且 Selenium 无法聚焦“真实”屏幕。
我真的不明白发生了什么。我尝试使用 Chrome 驱动程序运行我的测试,我遇到了同样的问题。我很确定我错过了一些明显的东西。
如果您有任何想法,我将不胜感激。这是我在这里的第一条信息,如果我没有以正确的方式写它或者如果缺少某些东西,你也可以说出来。
这是 ElementNotInteractableException 的堆栈跟踪:
org.openqa.selenium.ElementNotInteractableException:无法点击元素
构建信息:版本:'3.6.0',修订:'6fbf3ec767',时间:'2017-09-27T15:28:36.4Z' 系统信息:主机:'BLABLA',ip:'BLABLA',os.name: 'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.8.0_102'
驱动程序信息:org.openqa.selenium.ie.InternetExplorerDriver
能力 [{proxy=Proxy(), acceptInsecureCerts=false, browserVersion=11, se:ieOptions={nativeEvents=true, browserAttachTimeout=0, ie.ensureCleanSession=false, elementScrollBehavior=0, enablePersistentHover=true, ie.browserCommandLineSwitches=, ie .forceCreateProcessApi=false, requireWindowFocus=false, initialBrowserUrl= http://localhost:43020/ , ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, ignoreProtectedModeSettings=false}, timeouts={implicit=0, pageLoad=300000, script=30000} , browserName=internet explorer, pageLoadStrategy=normal, javascriptEnabled=true, platformName=WINDOWS, setWindowRect=true, platform=WINDOWS}]
会话 ID:50e4def1-11aa-43c6-8f9e-a52cd324a1b5
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在 java.lang.reflect.Constructor.newInstance(Constructor.java:423)
在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:185)
在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:120)
在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)
在 org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279)
在 org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83)
在 framework.elements.CustomElement.click(CustomElement.java:141)
在 parionsDirect.pageObject.PageVeilleAccueil.clicPremiereVisite(PageVeilleAccueil.java:56)
在 testAutomatises.TestHorsConnexion.pageVeilleVisiteur(TestHorsConnexion.java:97)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
在 org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
在 org.junit.rules.RunRules.evaluate(RunRules.java:20)
在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
在 org.junit.runners.ParentRunner.run(ParentRunner.java:363)
在 org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
在 org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
在 org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)