使用Jenkins进行的Selenium测试无法与元素

时间:2017-11-08 15:25:00

标签: maven selenium jenkins selenium-iedriver

我需要在IE11上测试一个网站,所以我用IEDriver做了一个selenium测试项目。我也用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启动时我的测试功能:

  
      
  • 点击"欢迎屏幕"访问下一页; =>这很好,但很简单,因为这个页面只包含一个占用所有内容的元素   屏幕
  •   
  • 检查2个元素时失败:

         

    1)为false,element1.getText()为空

         

    2)为false,而element2.getText()为空

         

    3)是真的

  •   
  • 如果我删除断言并尝试直接点击element2,我有一个ElementNotInteractableException

  •   

我发现任何异常,以便在出现错误时获取屏幕截图。在这里,截图只是一个黑屏。

据我了解,当与Jenkins一起推出时,Selenium"知道"页面上有一些元素(=> element2.isEnabled()为true),但不是"参见"他们(=> 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&#39 ;,os.version:' 6.1',java.version:' 1.8.0_102'

     

驱动程序信息:org.openqa.selenium.ie.InternetExplorerDriver

     

Capabilities [{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

     

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:185)

     

at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:120)

     

at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)

     

at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)

     

at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)

     

at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)

     

at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:279)

     

at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83)

     

at framework.elements.CustomElement.click(CustomElement.java:141)

     

at parionsDirect.pageObject.PageVeilleAccueil.clicPremiereVisite(PageVeilleAccueil.java:56)

     

at testAutomatises.TestHorsConnexion.pageVeilleVisiteur(TestHorsConnexion.java:97)

     

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)       在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)

     

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

     

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

     

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

     

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)

     

at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)

     

at org.junit.rules.TestWatcher $ 1.evaluate(TestWatcher.java:55)

     

at org.junit.rules.RunRules.evaluate(RunRules.java:20)

     

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

     

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

     

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)

     

at org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)

     

at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71)

     

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

     

at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)

     

at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)

     

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)

     

at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)

     

at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

     

at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)

     

at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)

     

at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)

     

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)

     

at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)

     

at org.apache.maven.surefire.booter.ProviderFactory $ ProviderProxy.invoke(ProviderFactory.java:165)

     

at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)

     

at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)

     

at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

2 个答案:

答案 0 :(得分:0)

仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序可以维护与其创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的密钥是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。

对于64位Windows安装,密钥为HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。请注意,FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在,则应创建该子项。在此键内,创建一个名为iexplore.exe的值为0的DWORD值。

IE还会缓存运行/使用之间的内容,您必须清除缓存和个人设置。我发现以下内容有助于确保启动时实例是干净的。这些是在实例化WebDriver时将传递到IE实例的选项。

本地:

var options = new InternetExplorerOptions();
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
//Clean the session before launching the browser
options.EnsureCleanSession = true;

远程:

capabilities = DesiredCapabilities.InternetExplorer();
capabilities.SetCapability("ie.ensureCleanSession", true);

答案 1 :(得分:0)

你说,当你在你的电脑上安装的Jenkins上运行测试时,浏览器甚至无法看到,你尝试了Chrome和IE。 当我安装Jenkins刚刚启动jenkins.exe时,我个人遇到了这种情况。尝试使用" java -jar jenkins.war"作为服务器运行它。命令。 就我而言,这个问题帮助了我Jenkins : Selenium GUI tests are not visible on Windows