LeanFT& Java:在Docker容器中运行测试

时间:2018-05-17 13:09:04

标签: java docker leanft

LeanFT& Java:在Docker容器中运行测试 我的基于Java的LeanFT测试在我的本地机器上使用IntelliJ,JUnit和LeanFT正常工作:

Chrome打开,我看到测试运行,一切正常。

现在我想在Docker容器中运行这些测试。

当我的测试只做一个简单的导航时,一切正常:

@test
public void simpleTest2() throws GeneralLeanFtException {

    browser.navigate("https://www.google.com");

}

Docker启动,获得LeanFt许可证并运行测试:

dev@ubuntu:~$ docker run -p 5900:5900 -v /home/dev/development/tempprojects/LeanFT_1/target:/tests --env LFT_LIC_SERVER=S021000105693b.adr.admin.ch --env LFT_LIC_ID=10594 --env RUN_MODE=junit --env RUN_CMD=ch.admin.bit.LeanFtTest -t -i -w /tests functionaltesting/leanft-chrome 


LeanFT runtime engine started successfully
License: Concurrent UFT Enterprise Concurrent User
Port: 5095
Version: 14.3.546, (c) Copyright 2015 EntIT Software LLC
Installation Folder: /opt/leanft
Executing junit test: ch.admin.bit.LeanFtTest
JUnit version 4.12
.
Time: 5.778

OK (1 test)

LeanFT runtime engine has stopped successfully

问题:

当我在测试中添加WebElement时,它不起作用(并且在IntelliJ中它与LeanFT-Runner一起使用)

这样的事情:

Menu dEFRITENMenu = browser.describe(Menu.class, new MenuDescription.Builder()
.accessibilityName("")
.id("")
.role("menu")
.tagName("UL")
.index(1).build());
dEFRITENMenu.select("EN");

错误是:

1) simpleTest(ch.admin.bit.LeanFtTest)
com.hp.lft.sdk.ReplayObjectNotFoundException: Cannot identify the object "Web Menu".
Verify that this object's properties match an object currently displayed in your application.
at com.hp.lft.sdk.internal.ReplayExceptionFactory$1.create(ReplayExceptionFactory.java:34)
at com.hp.lft.sdk.internal.ReplayExceptionFactory.createOrDefault(ReplayExceptionFactory.java:197)
at com.hp.lft.sdk.internal.ReplayExceptionFactory.createOrDefault(ReplayExceptionFactory.java:21)
at com.hp.lft.sdk.internal.TestObjectExecuterBehaviorBase$ReplayErrorHandler.onError(TestObjectExecuterBehaviorBase.java:65)
at com.hp.lft.sdk.internal.CommunicationClientImpl.handleError(CommunicationClientImpl.java:221)
at com.hp.lft.sdk.internal.CommunicationClientImpl.send(CommunicationClientImpl.java:96)
at com.hp.lft.sdk.internal.TestObjectExecuterBehavior.executeMethod(TestObjectExecuter.java:33)
at com.hp.lft.sdk.internal.TestObjectBase.executeMethod(TestObjectBase.java:119)
at com.hp.lft.sdk.internal.web.WebMenu.access$100(WebMenu.java:14)
at com.hp.lft.sdk.internal.web.WebMenu$2.invoke(WebMenu.java:52)
at com.hp.lft.sdk.internal.TestObjectOperationWrapper.executeWithEvents(TestObjectOperationWrapper.java:81)
at com.hp.lft.sdk.internal.TestObjectOperationWrapper.executeWithEvents(TestObjectOperationWrapper.java:102)
at com.hp.lft.sdk.internal.web.WebMenu.select(WebMenu.java:56)
at ch.admin.bit.LeanFtTest.simpleTest(LeanFtTest.java:66)
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.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.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)

有人有想法或正在运行的例子吗?

1 个答案:

答案 0 :(得分:0)

元素真的存在吗?

要调试答案,请尝试KFold cross-validation并使用import numpy as np import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.metrics import classification_report from sklearn.model_selection import cross_val_predict from sklearn.model_selection import KFold # import data iris = datasets.load_iris() X = iris.data y = iris.target class_names = iris.target_names # keep only 2 classes to make the problem binary X = X[y!=2] y = y[y!=2] # Define the classifier classifier = svm.SVC(kernel='linear', C=0.01) # KFold cross validation cv = KFold(n_splits=3) y_pred = cross_val_predict(classifier, X, y, cv = cv) print(classification_report(y, y_pred, target_names=class_names)) precision recall f1-score support setosa 0.98 1.00 0.99 50 versicolor 1.00 0.98 0.99 50 avg / total 0.99 0.99 0.99 100 api报告值,或browser.getPage().getText()或其他任何内容。在Reporter之后执行此操作,如果它有效,它应该适用于任何其他LeanFT命令。

你甚至可以描述html的主体并记录println值,如下所示:

browser.navigate

是否启用了浏览器扩展程序?

无论是否启用浏览器扩展,启动都会起作用,但是,对于复杂的执行,您需要启用LeanFT浏览器代理。

这是正确的描述吗?

我可以看到,最初的描述需要:

  • innerHTML
  • WebElement htmlBody = browser.describe(WebElement.class, new WebElementDescription.Builder().tagName("BODY").build()); htmlBody.getInnerHTML();
  • accesibilityName角色,
  • 一个id元素
  • "menu"必须为<ul>

如果索引为index怎么办?您是否100%确定所有浏览器/所有机器上的索引都相同?如果它不是1元素怎么办?如果您使用2代替上述说明吗?

尝试消除错误值的风险,并将描述限制为您知道100%确定无法从浏览器更改为浏览器的内容。

使用对象识别中心可以在这方面提供很多帮助。

您对上述所有问题的回答是肯定的吗?

嗯,LeanFT在这种情况下工作,但它并没有像预期的那样工作。在这种情况下,它可能是一个LeanFT错误。