Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在量角器e2e测试中找不到Matsnakbar元件_Javascript_Angular_Protractor - Fatal编程技术网

Javascript 在量角器e2e测试中找不到Matsnakbar元件

Javascript 在量角器e2e测试中找不到Matsnakbar元件,javascript,angular,protractor,Javascript,Angular,Protractor,我无法使用量角器定位Matsnakbar元素 这就是我展示快餐店的方式 const snackBarRef = this.snackBar.open('Book added.', 'Undo', { duration: 300000 }); 这是e2e测试 const snackBar = element(by.tagName('simple-snack-bar')); browser.wait(ExpectedConditions.visibilityOf(snackBar), 3000

我无法使用量角器定位Matsnakbar元素

这就是我展示快餐店的方式

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');
});
测试代码因此错误而失败。
错误:超时-在jasmine指定的超时时间内未调用异步回调。默认超时时间间隔。

超时时间来自浏览器。等待30秒,因此应用程序无法在该时间内找到元素。因此,将超时时间增加为:

将以下属性添加到配置文件中:

jasmineNodeOpts: {defaultTimeoutInterval: 40000}
关于未找到的元素

  • 确保elemnt不在iframe或shadown内,如果是,则在访问它之前切换到父级

  • 正确使用承诺链或使用等待


  • 谢谢你的留言,@dplavcic。 我的代码不起作用的原因是snackbar超出了角根。所以我不得不使用
    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();
    }```
    
    public getSnackBar():promise.promise{
    const snackbar=browser.driver.wait(直到.elementLocated(通过.tagName('simple-snack-bar')),10000);
    返回snackbar.getText();
    }```
    
    Hi,您是否尝试添加。然后(()=>browser.sleep(60_000))并手动检查标签名为“simple Snakp bar”的元素是否确实存在于页面上。此外,当应用程序运行时,可以手动执行getElementsByTagName()以验证元素是否存在。by.tagName()在内部使用相同的函数。我发现出现此问题是因为我无法使用元素函数指示根目录外的元素。您应该能够通过browser.driver.findElement(by.id('you-element-name'))访问页面上根目录外的任何元素。我尝试了
    const snackBar=wait browser.driver.findElement(按.tagName('simple-snack-bar'))
    但它也失败了。奇怪。我刚刚创建了一个新的Angular应用程序,并将其添加到index.html

    outside app root

    ,我编辑了一个预生成的测试,以
    它('should display welcome message',async()=>{wait page.navigate();expect(wait元素(by.id('outside-app-root')).getText()).toEqual('demo-app-is running!');})
    它失败,预期的'outside-app-root'等于'demo-app-is running!'。,这是正确的!
    public getSnackBar(): promise.Promise<string> {
        const snackbar = browser.driver.wait(until.elementLocated(By.tagName('simple-snack-bar')), 10000);
    
        return snackbar.getText();
    }```