当前位置: 首页 > 知识库问答 >
问题:

量角器在继续AngularJS测试之前没有等待登录重定向,有什么建议吗?

冯茂实
2023-03-14

我有一个标准的用户名/密码/提交按钮表单,当用户单击该按钮时,表单将使用ng submit=“login.submit()”进行提交,登录成功后使用ui重定向到主页面。路由器($state.go(“main”))。

以下测试失败:

  describe("login", function() {
    beforeEach(function() {
      var email = element(by.model("login.email"));
      email.clear().sendKeys("mail");

      var password =  element(by.model("login.password"));
      password.clear().sendKeys("pass");

      var submit = element(by.id("submit"));
      submit.click();
    });

    it("should be able to login", function() {
      expect(element(by.css(".loginPage")).isPresent()).toBe(false);
      expect(element(by.css(".mainPage")).isPresent()).toBe(true);
    });
  });

如果我尝试添加等待时间,我可以看到浏览器一直停留在登录页面上(单击按钮后),然后我会得到一个超时。

成功登录后,浏览器会收到一个cookie,其中包含用于验证以下每个请求的令牌。

编辑:通过一些修补,我找到了它失败的地方。。

function login(email, pass) {
  alert("it gets here");
  return _auth.post({ username: email, password: pass }).then(function(data) {
    alert("does not get here");
    console.log("loginok, token:" +$browser.cookies().apiToken); //this should be the received token
    return data;
  });
}

EDIT2:身份验证服务

var _auth = Restangular.withConfig(function(Configurer) {
  Configurer.setBaseUrl("/");
}).service("auth/simple");

return {
  login: login,
};

function login(email, pass) {
  return _auth.post({ username: email, password: pass });
}

手动操作,一切正常。

共有2个答案

颜霖
2023-03-14

试试这个:

it("should be able to login", function() {

  browser.wait(element(by.css(".mainPage")).isPresent);//this is different from sleep, this will stop the excecution of all the protractor code that is after it, until the element is present, but it won't prevent the application of loading or if is redirecting, it will keep working.

  expect(element(by.css(".loginPage")).isPresent()).toBe(false);
  expect(element(by.css(".mainPage")).isPresent()).toBe(true);
});

});

曹理
2023-03-14

@约门德斯的回答非常接近,但对我来说不起作用。使用@DaveGray在这里。

必须在函数中包装isPresent()调用。

browser.wait(function() {
  return element(by.css('.mainPage')).isPresent();
});
 类似资料:
  • 问题内容: 我试图在Selenium / Python中运行一个脚本,该脚本要求在其他位置登录才能运行其余脚本。有什么办法让我告诉脚本暂停并在登录屏幕上等待,以便用户手动输入用户名和密码(也许是等待页面标题更改的内容,然后继续执行脚本)。 到目前为止,这是我的代码: 问题答案: 使用WebDriverWait。例如,这将执行google搜索,然后等待某个元素出现,然后再打印结果: 将返回lambd

  • 我有一个加载页面,我想在其中对不相关的信息执行两个网络请求(rxjava)。在这两个请求完成之前,我不想进入下一页,即使其中一个或两个都失败了。 > 使用zip将请求绑定在一起。有没有办法不必被迫使用双函数,也不必返回null? 请求A和B有一个。doOnNext和。多恩。如果其中一个返回错误,zip observable是否继续?zip订阅服务器是否也会返回错误? 这是最好的方法吗?

  • 问题内容: 我有一个单击按钮并重定向到用户仪表板的测试。发生这种情况时,Webdriver返回: 为了解决这个问题,我将插入到发生重定向的位置,并假设我的CPU使用率很低,这可以解决此问题。但是,2000 ms是任意的并且很慢。是否有类似的东西会等到Angular在重定向页面上加载之前? 问题答案: 您认为这样的事情对您有用吗?最多需要等待10秒,URL才能包含文本“ pageTwo”或您输入的任

  • 我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面

  • 我有一个带有输入框和用户界面选择下拉列表的表单,在ng-blur事件中,我调用了一个方法来自动选择所有三个用户界面选择中的选项。当我使用量角器e2e测试执行此操作时,它不会等待用户界面选择发生并提交表单,这会引发异常,因为它没有找到只有在提交包含所有必需字段的表单后才会出现的元素。我试过这样browser.wait 它正在抛出异常。

  • 问题内容: 我有一个AngularJS应用,可使用GitHub上的oAuth SSO进行身份验证。我试图找出一种使用量角器和自动化登录测试的方法。我无法弄清楚如何检索非角度字段以及如何管理页面加载的等待时间,我的规范如下所示: 我这样运行命令: 如何正确加载身份验证页面,在字段中输入正确的信息,然后等待重定向回到我的Angularized应用程序(我可以从那里处理事情)。 我试图使用调试器跳入此代