繁体   English   中英

使用Jenkins进行的硒测试无法与element交互

[英]Selenium test run with Jenkins cannot interact with element

我需要在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

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

因此,据我了解,Selenium与Jenkins一起启动时,“知道”页面上有一些元素(=> 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',操作系统名称: '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,即ensureCleanSession = false,elementScrollBehavior = 0,enablePersistentHover = true,即browserCommandLineSwitches =,即.forceCreateProcessApi = false,requireWindowFocus = false,initialBrowserUrl = http:// localhost:43020 / ,ignoreZoomSetting = false,即fileUploadDialogTimeout = 3000,ignoreProtectedModeSettings = false},超时= {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(本机方法)处

在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(本机方法)处

在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)的java.lang.reflect.Method.invoke(Method.java:498)

在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(本机方法)处

在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)

仅对于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的DWORD值,其值为0。

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);

您说过,当您在PC上安装的Jenkins上运行测试时,甚至无法看到浏览器,并尝试了chrome和IE。
我在刚启动jenkins.exe时安装Jenkins时遇到了这种情况。 尝试使用“ java -jar jenkins.war”命令将其作为服务器运行。 就我而言,这个问题对我有帮助。Jenkins:Selenium GUI测试在Windows上不可见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM