Javascript 为什么量角器可以';找不到元素(按.id(';mat-input-0';)?

Javascript 为什么量角器可以';找不到元素(按.id(';mat-input-0';)?,javascript,jasmine,protractor,Javascript,Jasmine,Protractor,我是自动化新手,我正在运行一个非常基本的测试,它运行得很好,但就在最近它停止工作,我不断收到以下错误: 失败:脚本超时:11秒内未收到结果 我查了一下,做了一些基本的调试,发现量角器找不到我所指的元素(元素(by.id('mat-input-0'))-在spec.js代码文件中有更多内容)。 我正在使用最新版本的量角器(5.4.2),以及Jasmine的最新版本(3.4.0)。我正在测试最新的chrome浏览器 我尝试了许多在线解决方案(比如使用async/await,在配置文件中添加longa

我是自动化新手,我正在运行一个非常基本的测试,它运行得很好,但就在最近它停止工作,我不断收到以下错误:

失败:脚本超时:11秒内未收到结果

我查了一下,做了一些基本的调试,发现量角器找不到我所指的元素(
元素(by.id('mat-input-0')
)-在spec.js代码文件中有更多内容)。
我正在使用最新版本的量角器(5.4.2),以及Jasmine的最新版本(3.4.0)。我正在测试最新的chrome浏览器

我尝试了许多在线解决方案(比如使用async/await,在配置文件中添加long
allScriptsTimeout
defaultTimeoutInterval
),使用不同的定位器(通过xpath、id、标记名等)调用元素,尝试
browser.waitForAngular();
browser.ignoreSynchronization=true
,…)但都不起作用,所以我想知道是否有人对解决方案有任何意见?(或者真正的问题是什么?)

元素HTML

<input _ngcontent-mkt-c2="" class="mat-input-element mat-form-field-autofill-control cdk-text-field-autofill-monitored ng-pristine ng-invalid ng-touched" formcontrolname="email" matinput="" name="email" placeholder="Email" required="" type="text" id="mat-input-0" aria-invalid="true" aria-required="true">
Conf.js:
您收到的错误可能有很多原因,但正如您所说,您对量角器是新手。我想说的是,首先要简单的步骤

量角器安装完成后。您的计算机必须在%appdata%中有文件夹。转到目录路径AppData\Roaming\npm\node\u modules\dragrator\example。在这个目录中,您必须看到两个文件conf.js和example_spec.js。在spec文件中,用您拥有的url替换url,并对测试执行相同的操作

运行配置文件而不进行任何更改。并检查它是否工作正常,然后出现一些配置问题


请仔细阅读以了解更多信息。

您收到的错误可能有很多原因,但正如您所说,您对量角器是新手。我想说的是,首先要简单的步骤

量角器安装完成后。您的计算机必须在%appdata%中有文件夹。转到目录路径AppData\Roaming\npm\node\u modules\dragrator\example。在这个目录中,您必须看到两个文件conf.js和example_spec.js。在spec文件中,用您拥有的url替换url,并对测试执行相同的操作

运行配置文件而不进行任何更改。并检查它是否工作正常,然后出现一些配置问题


请浏览以了解更多信息。

浏览器。waitForAngular()
不等同于
浏览器。忽略同步
您可能会想到
浏览器。waitForAngularEnabled()
。你能发布你试图定位的对象的HTML吗?@DublinDev我猜
浏览器。waitForAngular()
将与
浏览器相同。waitForAngularEnabled(true)
否?-如果我错了,请纠正我。以下是我试图查找的字段的HTML:
我确实使用了
浏览器解决了这个问题。waitForAngularEnabled(false)
但我了解到不建议使用它,之后的测试将变得不稳定…所以我正在研究另一个解决方案…我想知道我如何知道我的页面上还有什么不稳定?(超过7度)@DublinDev
waitForAngularEnabled(true)
告诉量角器,您希望它在每次操作之前等待页面上的所有角度调用完成且页面稳定。Mu的理解是,如果设置了
waitForAngular()
,则在尝试进行任何交互之前将调用它。关于禁用
waitForAngularEnabled
的缺点,您是正确的。根据你最近的评论,你的问题显然与量角器不稳定有关。您是否可以在chrome开发工具上打开控制台并运行以下命令
getAllAngularTestabilities()
。展开结果时,您可能会看到属性
hasPendingMacrotasks:false
hasPendingMicrotasks:true
。是这样吗?
browser.waitForAngular()
不等同于
browser.ignoreSynchronization
您可能会想到
browser.waitForAngularEnabled()
。你能发布你试图定位的对象的HTML吗?@DublinDev我猜
浏览器。waitForAngular()
将与
浏览器相同。waitForAngularEnabled(true)
否?-如果我错了,请纠正我。以下是我试图查找的字段的HTML:
我确实使用了
浏览器解决了这个问题。waitForAngularEnabled(false)
但我了解到不建议使用它,之后的测试将变得不稳定…所以我正在研究另一个解决方案…我想知道我如何知道我的页面上还有什么不稳定?(超过7度)@DublinDev
waitForAngularEnabled(true)
告诉量角器,您希望它在每次操作之前等待页面上的所有角度调用完成且页面稳定。Mu的理解是,如果设置了
waitForAngular()
,则在尝试进行任何交互之前将调用它。关于禁用
waitForAngularEnabled
的缺点,您是正确的。根据你最近的评论,你的问题显然与量角器不稳定有关。您是否可以在chrome开发工具上打开控制台并运行以下命令
getAllAngularTestabilities()
。展开结果时,您可能会看到属性
hasPendingMacrotasks:false
hasPendingMicrotasks:true
。是这样吗?
describe('Login', function(){
    it('test 1', async function(){
        await browser.get('the STG URL im testing');


    })
    it('set username', async function(){
        await element(by.id('mat-input-0')).sendKeys('root@user.com');


    })
    it('set password', async function(){
        await element(by.id('mat-input-1')).sendKeys('1234');
    })

})
exports.config = {  
    seleniumAddress: 'http://localhost:4444/wd/hub',
    allScriptsTimeout: 80000,

    framework: 'jasmine',

    specs: ['spec.js'],

    SELENIUM_PROMISE_MANAGER: false,

    jasmineNodeOpts: {
      defaultTimeoutInterval: 50000
    }
  };