当前位置: 首页 > 知识库问答 >
问题:

使用Jenkins运行的Selenium测试无法与元素交互

马魁
2023-03-14

我需要在IE11上测试一个网站,所以我用IEDRiver做了一个selenium测试项目。我也使用Maven。在local中一切都很好,我现在不得不使用Jenkins来启动我的测试。

我创建了一个简单的工作来尝试我的一个测试。Jenkins找到我的pom.xml,用IEDriver打开浏览器,导航到我的url,然后问题就开始了。

我的测试在本地运行时所做的工作:

点击element2进入下一页;

当通过詹金斯启动时,我的测试会做什么:

>

  • 点击“欢迎屏幕”进入下一页;=>这是可以的,但很容易,因为这个页面只包含一个元素,它占据了整个屏幕
  • 检查下列2个元素失败:

    因此,据我所知,当用Jenkins启动时,Selenium“知道”页面上有一些元素(=>element2.isenabled()是真的),但没有“看到”它们(=>element2.gettext()是空的),也无法与它们交互,就好像它们在黑屏的“后面”,Selenium无法聚焦“真正的”屏幕。

    我真不明白这是怎么回事。我试着用Chrome驱动程序运行我的测试,我也有同样的问题。我很确定我漏掉了一些明显的东西。

    如果你有任何想法,我会非常详细地说明。这是我在这里的第一条信息,如果我没有用正确的方式写,或者如果有什么遗漏,你也可以说。

    构建信息:版本:'3.6.0',修订:'6FBF3EC767',时间:'2017-09-27T15:28:36.4Z'系统信息:主机:'blabla',IP:'blabla',OS.name:'Windows7',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,AD=30000,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)

    在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.service.drivercommandexecutor.execute(drivercommandexecutor.java:83)

    在org.openqa.selenium.remote.remoteWebDriver.execute(remoteWebDriver.java:586)

    在org.openqa.selenium.remote.remoteWebelement.execute(remoteWebelement.java:279)

    在parionsDirect.pageObject.pageVeilleAccueil.clicPremierevisite(PageVeilleAccueil.java:56)

    在TestAutomatises.testhorsConnexion.PageVeilleVisiteur(TesthorsConnexion.java:97)

    在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)

    在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.InvokeExpressible(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.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$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)

    在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.forkedbooter.runsuitesinprocess(forkedbooter.java:115)

    在org.apache.maven.surefire.booter.forkedbooter.main(forkedbooter.java:75)

  • 共有1个答案

    漆雕彦
    2023-03-14

    仅对于IE11,您将需要在目标计算机上设置一个注册表项,以便驱动程序可以维护与它创建的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);
    
     类似资料:
    • 问题内容: 我正在寻找一个有趣的程序,但是我在硒方面有一些问题, 我需要一些帮助……这是程序(我删除了 webdriver目录,因为文件夹名称包含其他人的名称) 因此,目的很简单,应该打开一个窗口,键入文本,然后单击 一个按钮。一切正常,但单击不起作用,这是错误: 因此,我不是专家,但它说:元素不是相互联系的吗?这是什么意思 ,我该如何解决?我真的很感谢您的回复… 问题答案: 要将字符序列发送到网

    • 我需要与此元素进行交互,以使用硒,cucumber和java注销,但它不工作: 期望元素映射 控制台上显示的消息 下面是我代码的一部分,只有我用来尝试注销的方法,记住对于其他映射它是有效的:

    • 遇到以下错误。无法确定确切的根本原因。 WebDriverException:无法连接到端口7055上的二进制FirefoxBinary(/usr/lib64/Firefox/Firefox);进程输出如下:错误:无法打开Display::99错误:无法打开Display::99 构建信息:版本:“2.45.0”,修订版:“32A636C”,时间:“2015-03-05 22:01:35”系统信息

    • 我正在使用Java和Selenium来自动化我的测试。我的一个测试需要从计算机上传图像。我使用Robot对象来识别上传窗口并设置文件的路径。通过IntelliJ运行测试时,一切正常,因为浏览器位于前面,包括上传窗口。当我通过Jenkins运行测试时,浏览器和上传窗口仍然位于后面,无法上传文件。 我尝试了几种方法将窗口放在最前面,它们只有在通过IntelliJ直接运行时才能工作,但詹金斯仍然存在问题

    • 我在Jenkins做一个terraform测试。以下是我所做的: > 已安装terraform插件 我知道它看不到地球形态,但我怎么才能让它看到呢?我用github回购来获取消息。我想为每个terraform命令做一个步骤:init、plan和apply。我怎样才能做到这是詹金斯?我找不到任何教程解释这一点。多谢了。