如何测试跨度?

时间:2019-06-12 08:57:21

标签: angular protractor e2e-testing angular-e2e

我正在测试登录页面,在输入无效的登录名和密码的情况下,我希望收集跨度“验证失败”

当我在导航器控制台上测试时,我通过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(未经授权)”。

1 个答案:

答案 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; } 类,并返回失败的响应。这样,您就可以执行断言而不会遇到问题。

希望这会有所帮助