我正在测试登录页面,在输入无效的登录名和密码的情况下,我希望收集跨度“验证失败”
当我在导航器控制台上测试时,我通过xpath'/ html / body / div [2] / div / div / snack-bar-container / simple-snack-bar / span选择跨度webElement范围内的文字。但是当我在测试脚本上使用它时,它将无法工作。
getSnackbar() {
return element(by.xpath('/html/body/div[2]/div/div/snack-bar-
container/simple-snack-bar/span'));
}
it(' SnackBar "Authentication Failed" Appears ', () => {
login.navigateTo();
element(by.id('username')).sendKeys('LogIn');
element(by.id('password')).sendKeys('pwd');
login.logIn();
browser.sleep(5000);
expect(login.getSnackbar().getText()).toEqual('Failed Authentication');
});
我希望得到一个积极的测试结果,但是我收到:“无法加载资源:服务器的响应状态为401(未经授权)”。
答案 0 :(得分:0)
我的第一要点是不要在测试中使用xpath,因为它们非常脆弱。在Angular测试中获取元素的最佳方法是使用以下
elementYouWant = fixture.debugElement.query(By.css('.class-of-element'));
或
browser.sleep()
也不要使用login
,因为这会使单元测试持续至少5秒钟,这太慢了。如果异步,请尝试等待该函数。
关于错误消息 似乎您没有在模仿登录方法。 (即您正在向服务器发出真实呼叫)。您不应该这样做。单元测试应该模拟出所有外部依赖项。
您应该使用模拟的logIn()
方法创建模拟 Please use oncick function on the text type field, not on the hidden field like this -
<input type="text" class="form-control" id="recipientNameText" name="recipientName" size="45" onchange="test1()" />
and use javascript code like this -
function test1(){
var recipientNameValue = document.getElementById('recipientNameText').value;
document.getElementById('recipientNameHidden').value = recipientNameValue;
}
类,并返回失败的响应。这样,您就可以执行断言而不会遇到问题。
希望这会有所帮助