在自动完成游戏关卡传递过程中,我有几个用户组,所有这些用户组都使用一种方法登录游戏,该方法接受用户名和密码的输入,但是会收到不同数量的解锁关卡,具体取决于用户组(每个用户在游戏中具有不同级别)。
在测试所有级别是否通过的过程中,我想在测试过程中确定每个级别的末尾用户是否已解锁下一个级别,然后继续测试或成功完成测试。 我已经读过硒的其他实现方式,并且我目前正在使用这样的方法:
public boolean isElementExisting(WebElement element){
try {
wait.until(ExpectedConditions.elementToBeClickable(element));
} catch (Exception e) {
return false;
}
return true;
}
并在测试中使用if逻辑:
if (isElementExisting(level3Button) == false) {
driver.quit();
}
- rest of the tests follow here.
使用driver.quit();
时,测试会自动失败。我要搜索的所需行为是使测试通过if语句(可以使用什么代替driver.quit();
方法)?
我可以将所有代码用于在单独的嵌套if / else语句中测试进一步的级别,但这会很麻烦,目前正在寻找更实用的解决方案,例如在某个点上成功进行测试。
答案 0 :(得分:1)
从应该具有已知结果的意义上来说,测试应该是静态的。 因此,测试的结构和编写方式应遵循该逻辑。
鉴于上述内容,我将编写如下测试:
login.asUser(username,password);
// additional logic in here
assertTrue(page.userHasLevelUnlocked("level3"));
然后是方法
public boolean userHasLevelUnlocked(String level){
switch(level)
case "level3":
if(isElementExisting(level3button){
return true;
} else {
return false
}
}
或类似的东西
答案 1 :(得分:0)
谢谢您的回答。我了解静态测试的概念,此外,测试不应具有“已知”结果,而应该具有“预期”结果,并且应该匹配,从某种意义上说,它可以测试某些东西以验证它的功能。 切换的情况是一个有效的场景,坦率地说,我看不到在发布的示例中断言失败之后会发生什么(测试也会失败)。 我实施的解决方案是使用类似于以下的方法来确定用户是否在上一个级别的末尾解锁了下一个级别:
public void isElementExistingAlternateResult(WebElement element) {
boolean isElementFound = true;
try {
wait.until(ExpectedConditions.elementToBeClickable(element));
} catch (Exception e) {
isElementFound = false;
}
if (isElementFound == true) {
System.out.println("test is continued...");
} else {
Reporter.getCurrentTestResult().setStatus(ITestResult.SUCCESS);
System.out.println("next level not unlocked.");
}
这样,只有在找不到下一个可用级别时,测试才会确定该实时时间,并且它将在该确切点停止并通过。请注意,这是将否则失败的测试用例与TestNG Reporter类中的结果交替显示的方法:
Reporter.getCurrentTestResult().setStatus(ITestResult.SUCCESS);
缺点-这使得测试无法测试针对不同用户解锁的不同级别级别的功能,因为无论解锁的级别数量如何,它都会测试它们并通过,但这最好不要自动化。
好处-它非常简单,并且可以在大约500个步骤的测试用例中很好地工作(仅使其中一些是“动态的”)。