簡體   English   中英

無法在 protractor e2e 測試中找到 MatSnackBar 元素

[英]Unable to locate MatSnackBar element in protractor e2e test

我無法使用 protractor 找到 MatSnackBar 元素。

這就是我展示小吃店的方式。

const snackBarRef = this.snackBar.open('Book added.', 'Undo', {
  duration: 300000
});

這是e2e測試。

const snackBar = element(by.tagName('simple-snack-bar'));
browser.wait(ExpectedConditions.visibilityOf(snackBar), 30000);
element(by.tagName('simple-snack-bar')).getText().then(function (val) {
  console.log(val);
  expect(val).toEqual('Book added');
});

測試代碼因此錯誤而失敗。 Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

感謝您的留言,@dplavcic。 我的代碼不起作用的原因是,snackbar 不在 angular 根目錄下。 所以我必須使用browser.driver.findElement()而不是element() ,終於解決了這個問題。

就像是:

public getSnackBar(): promise.Promise<string> {
    const snackbar = browser.driver.wait(until.elementLocated(By.tagName('simple-snack-bar')), 10000);

    return snackbar.getText();
}```

超時是從 browser.wait 30 秒開始的,所以應用程序在那個時間內找不到元素。 所以增加超時時間:

將以下屬性添加到您的配置文件中:

jasmineNodeOpts: {defaultTimeoutInterval: 40000}

關於未找到元素

  1. 確保元素不在 iframe 或 shadown 內,如果是,則在訪問之前切換到父級

  2. 正確使用 promise 鏈接或使用 await 代替

 it('should find an element by text input model', async function() { await browser.get('app/index.html#/form'); var username =element(by.model('username')); await username.clear(); await username.sendKeys('Jane Doe'); var name = element(by.binding('username')); expect(await name.getText()).toEqual('Jane Doe'); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM