我在我的angular 2应用程序中使用ngx-toastr,并且已经开始对其进行一些e2e测试。我在测试 toastr 时遇到困难,因为它会在5秒钟后弹出并消失。

我尝试过添加一些不同的选择方法,如Stackoverflow上所建议,没有运气。

我试过的

getToastr() {
    var EC = protractor.ExpectedConditions;
    var targetEle = element(by.css(".toast-message"));

    browser.wait(EC.visibilityOf(targetEle), 10000, 'NOT VISIBLE'); //wait until
    //ele visible
    browser.wait(EC.presenceOf(targetEle), 10000, 'NOT PRESENT');
}

即使我看到了窗口中的 toastr ,也无法看到它的代码,但无法在dom中找到它。我已经拍摄了dom的屏幕截图,向您展示了该位置,因为我认为这可能与此有关。

这是dom Screenshot of DOM的屏幕截图,我正在尝试在启动注册部分中举杯。请注意,即使路由器中声明使用此 socket ,名为Default的路由器 socket 也不会包装启动注册-我不知道这是否是设计使然。
{
    path: 'signup',
    children: [
        { path: '', component: StartSignupComponent, outlet: 'default' }
    ]
},

好像Toastr div不在start-signup标签内。即使使用ngx-toastr自己的方法将Toastr消息移至“您选择的div”内,我也无法将其移入内部。目前,我将其放置在app.component中,并将 toastr “holder” div放置在路由器导出旁边-我也尝试过将div放置在路由器导出内,但也没有运气。

我从 Protractor 得到的错误是:
    1) Create account page should have a toastr message
  - Failed: NOT VISIBLE
Wait timed out after 10334ms

Executed 28 of 28 specs (1 FAILED) in 18 secs.
[14:01:29] I/launcher - 0 instance(s) of WebDriver still running
[14:01:29] I/launcher - chrome #01 failed 1 test(s)
[14:01:29] I/launcher - overall: 1 failed spec(s)
[14:01:29] E/launcher - Process exited with error code 1
npm ERR! Test failed.  See above for more details.

如果需要,我可以提供更多信息。这是我能想到的最初信息。

亲切的问候克里斯

最佳答案

我想我需要有关以上问题的更多信息。
“Dom屏幕截图”不足。如果可以在代码中显示完整的dom,那将是很好的。而不是屏幕截图。但是无论如何,如果我的猜测是正确的,那么您甚至都不需要ExpectedConditions。

你可以试试这个片段

var targetEle = element(by.css(".toast-top-right"));
var expectedEle = element(by.css(".toast-message"));

expect(targetEle.isPresent()).toBe(true).then(function(){
    expect(expectedEle.isDisplayed()).toBe(true);
});


如果您想测试 toastr 中的消息/文本,也可以尝试element(by.cssContainingText(""))

也许是如果您向我展示更详细的dom,我可能会为您提供更多建议。

我不认为5秒钟后消失对于 Protractor 来说不是问题,因为它在 Angular 元素上是异步的。

关于angular - 如何在Angular 2中使用 Protractor 测试ngx-toastr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43322381/

10-11 12:55