无法在量角器 e2e 测试中找到 MatSnackBar 元素
Unable to locate MatSnackBar element in protractor e2e test
我无法使用量角器定位 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.
超时是从 browser.wait 的 30 秒开始,因此应用程序无法在该时间内找到元素。所以增加超时时间:
将下面 属性 添加到您的配置文件中:
jasmineNodeOpts: {defaultTimeoutInterval: 40000}
关于找不到元素
确保 elemnt 不在 iframe 或 shadown 中,如果是,则在访问它之前切换到 parent
正确使用 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');
});
感谢您的留言,@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();
}```
我无法使用量角器定位 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.
超时是从 browser.wait 的 30 秒开始,因此应用程序无法在该时间内找到元素。所以增加超时时间:
将下面 属性 添加到您的配置文件中:
jasmineNodeOpts: {defaultTimeoutInterval: 40000}
关于找不到元素
确保 elemnt 不在 iframe 或 shadown 中,如果是,则在访问它之前切换到 parent
正确使用 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'); });
感谢您的留言,@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();
}```