- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的测试环境中,我们有执行某些操作的类,其中一些使用 SilkTest 内容。测试过程由 XML 文件定义,我们将其解析、转换为 ActionImpl 类并执行操作。例如,以下将登录我们的应用程序,切换用户,然后重新启动服务器:
<Script refBean="validateState" retry="false">
<DataGroups>
<Step action="log" mod="5.10.13 - Step 1" />
<Step action="switchUsers" target="mlane" />
<Step action="restartServer" />
</DataGroups>
</Script>
在 restartServer
操作的情况下,代码最终会调用以下方法,该方法使用当前正在运行的 eclipse.exe
(测试正在其中运行)创建一个 BaseState。
private PassFail restartServerInEclipse() {
Desktop desktop = new Desktop();
BaseState eclipseBaseState = new BaseState("*eclipse.exe", "/Shell[@caption='Java EE*']", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
desktop.executeBaseState(eclipseBaseState);
// Do some stuff, like finding CTabItem objects, clicking them, etc.
return passFail;
}
假设我正在运行当天的第一个测试。我刚开始工作,决定进行测试。如果代码执行 restartServer
操作,并调用 restartServerInEclipse()
,它将识别当前正在运行的 eclipse.exe
,并成功对我告诉它的任何 Silk 对象执行任何 Silk 方法。
但是,在测试完成后,在不退出 Eclipse 或 Open Agent 的情况下,如果我再次运行相同的测试,例如全新的对象、全新的测试线程,测试运行并停止,并且我再次单击 Eclipse 中的绿色运行按钮,当它到达 BaseState eclipseBaseState = new BaseState(...)
代码时,我会收到以下错误:
com.borland.silktest.jtf.common.LaunchApplicationFailedException: Failed to start application '*eclipse.exe' in working directory 'null'. The system cannot find the file specified.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.borland.silktest.jtf.agent.ExceptionTranslatorUtil.createException(ExceptionTranslatorUtil.java:60)
at com.borland.silktest.jtf.agent.ExceptionTranslatorUtil.translate(ExceptionTranslatorUtil.java:37)
at com.borland.silktest.jtf.agent.JtfModule.executeBaseState_aroundBody39$advice(JtfModule.java:121)
at com.borland.silktest.jtf.agent.JtfModule.executeBaseState(JtfModule.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy24.executeBaseState(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
at org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
at org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:47)
at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:351)
at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:258)
at com.borland.silktest.startservice.RmiConnectionUtil$1.invoke(RmiConnectionUtil.java:134)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy0.executeBaseState(Unknown Source)
at com.borland.silktest.jtf.Agent.executeBaseState(Agent.java:452)
at com.borland.silktest.jtf.BaseState.execute(BaseState.java:298)
at com.borland.silktest.jtf.Desktop.executeBaseState(Desktop.java:69)
at scripts.misc.validation.action.RestartServerActionImpl.restartServerInEclipse(RestartServerActionImpl.java:62)
at scripts.misc.validation.action.RestartServerActionImpl.evaluate(RestartServerActionImpl.java:25)
at scripts.misc.validation.ValidateState.evaluateStep(ValidateState.java:108)
at scripts.misc.validation.ValidateState.script(ValidateState.java:131)
at scripts.base.BaseScript.runWithRetries(BaseScript.java:204)
at scripts.base.BaseScript.runIt(BaseScript.java:312)
at suite.MainThread.script(MainThread.java:667)
at suite.MainThread.run(MainThread.java:281)
两秒前工作完全正常的基本状态现在不正确了。就好像一旦初始设置了基本状态,Eclipse 的某些内容就会发生变化,因此它无法重新识别它。
解决这个问题的唯一方法是重新启动 Eclipse 和 Open Agent,但即使这样有时也不起作用,而且我偶尔会遇到 OA 的一些许可证服务器问题,这需要重新启动计算机。
最佳答案
从您发布的日志文件中,我可以看到您正在测试 eclipse.exe
和 iexplore.exe
之间切换。您的脚本当前的构建方式是其中之一。这意味着,一旦您切换到 Internet Explorer,Silk Test 就会与 Eclipse 分离,并且将不再识别该窗口。
由于您无论如何都通过其他机制启动应用程序,因此我建议使用 attach
方法,该方法是累积的,并且会添加模式而不是替换它,因此您将避免在应用程序之间切换。
Desktop desktop = new Desktop();
desktop.attach("*\\eclipse.exe", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
desktop.attach("*\\iexplore.exe", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
Shell eclipse = desktop.find("/Shell[@caption='Java EE*']");
BrowserApplication browserApp = desktop.find("/BrowserApplication");
关于java - 连续测试运行后无法识别 SilkTest 基本状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473832/
假设我有一个对象并且它有很多子对象。我可以知道如何找到它们的类型吗? 我首先使用 getChildren() 获取子项,然后对每个子项使用 typeof()。 Typeof 总是返回窗口。 我想知道它
使用 SilkTest,我使用以下技术识别 Putty 窗口:Window puttyWindow = desktop.find("//Window[@caption='*PuTTY*']"); 有没
在我的测试环境中,我们有执行某些操作的类,其中一些使用 SilkTest 内容。测试过程由 XML 文件定义,我们将其解析、转换为 ActionImpl 类并执行操作。例如,以下将登录我们的应用程序,
有谁知道是否有 SilkTest 的替代品(最好是免费的)用于自动化 GUI 应用程序测试? [编辑]如果有所不同,这是用 C++/CLI 编写的仅限 Windows 的 GUI。 最佳答案 Sele
我正在使用 SilkTest 自动下载文件。在 IE8 中,会显示一个信息栏,显示“为了帮助保护您的安全,Internet Explorer 已阻止...单击此处查看选项...”。我希望能够通过 Si
我希望能够识别 Eclipse 窗口,该窗口始终已打开,因此我不需要使用 SilkTest 打开它。有没有一种方法可以将基本状态设置为始终打开的窗口?看来设置基本状态的方法也指定了要打开的可执行文件。
我是 SilkTest 的新手,没有任何脚本编写背景。我需要做的是记录一些测试用例,然后播放它们来检查我的系统。习惯之后,我打算学习脚本编写并深入研究它,但首先要做的是。 我需要的是将随机生成的(或从
我是一名优秀的程序员,十分优秀!