【问题标题】:Selenium test run with Jenkins cannot interact with element使用 Jenkins 运行的 Selenium 测试无法与元素交互
【发布时间】:2017-11-08 15:25:00
【问题描述】:

我需要在 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 启动时的作用:

  • 点击“欢迎界面”进入下一页; => 这没关系,但很简单,因为这个页面只包含 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)

【问题讨论】:

  • 几个问题。 jenkins服务器有最新的IEdriver.exe吗?运行测试的节点是否附加了屏幕。从屏幕上能看到这些元素吗?
  • @MadisKangro,是的,我用的是最新的IEdriver.exe,和我本地用的一样。关于第二个问题,我想做一个简单的尝试(哈哈...),所以我只是在本地计算机上安装了 Jenkins,并保留了所有节点配置以备后用。但是,当我使用 Jenkins 启动测试时,我看不到浏览器在我的屏幕上打开(当然,当我在本地运行测试时会打开)。
  • 你能分享一下你想要抓取的元素的 HTML 和选择器是什么样的吗?
  • @J.Paul,我使用标准方法来查找我的元素,因为它们中的大多数都没有 id。同样,它们在本地运行时工作。对于“欢迎页面”,我要求点击:welcomePage = driver.findElement(By.className("projectName-standby-sleep")); element1 = driver.findElement(By.xpath("//div[@class='discovery']/p")); element2 = driver.findElement(By.xpath("//a[@href='/projectName/home']/span"));

标签: maven selenium jenkins selenium-iedriver


【解决方案1】:

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

【讨论】:

  • 您的解决方案运行良好,谢谢!我创建了一个 .bat 文件,电脑启动时会自动启动,这样我就不用多想了。
【解决方案2】:

仅对于 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);

【讨论】:

  • 感谢您的建议。我添加了 FEATURE_BFCACHE。当我将 ensureCleanSession 功能设置为“true”时,我什至无法启动 webdriver 并出现以下错误:org.openqa.selenium.WebDriverException: Failed to navigate to https://myWebsiteAddress. This usually means that a call to the COM method IWebBrowser2::Navigate2() failed.
猜你喜欢
  • 1970-01-01
  • 2019-03-18
  • 2020-04-05
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多