0

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

我通过 xpath '/html/body/div[2]/div/div/snack-bar-container/simple-snack-bar/span 选择 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(未授权)”。

4

1 回答 1

0

我的第一点是不要在测试中使用 xpath,因为它们非常脆弱。在 Angular 测试中获取元素的最佳方法是使用以下内容

elementYouWant = fixture.debugElement.query(By.css('#id-of-element'));
或者
elementYouWant = fixture.debugElement.query(By.css('.class-of-element'));

也不要使用browser.sleep()你让你的单元测试持续至少 5 秒,这太慢了。如果它是异步的,请尝试等待该函数。

至于错误消息 ,您似乎没有模拟登录方法。(即您正在对您的服务器进行真正的调用)。你不应该这样做。单元测试应该模拟所有外部依赖项。

您应该使用模拟的方法创建一个模拟loginlogIn()并返回失败的响应。然后,您将能够执行您的断言而不会遇到您遇到的问题。

希望这可以帮助

于 2019-06-12T09:06:32.343 回答