【问题标题】:Protractor- Unable to locate element after loading the homepage量角器 - 加载主页后无法定位元素
【发布时间】:2017-11-01 03:06:38
【问题描述】:

登录后无法在主页上找到任何元素。

场景:点击个人资料名称/图标并点击退出按钮

it('Signout', function() {
                //tried with following code 
                //browser.waitForAngularEnabled(true);
                //locator below 
                //var profileIcon=element(by.model('user'));
                common.btnClk(homepage.profileIcon);
                common.btnClk(homepage.FCS_signoutbtn);
                browser.close();

            });

解决方法: 主页刷新时 browser.refresh();然后只能找到元素。 请建议没有此解决方法的解决方案。

日志:

[31m- [39m[31mFailed: Timed out waiting for asynchronous Angular tasks to finish after 120 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
  While waiting for element with locator - Locator: by.model("user"). 
  The following tasks were pending:
   - $timeout: function (){$rootScope.authenticated=false;$cookies.remove("access_token");$cookies.remove("organizationId");$cookies.remove("authenticated");$cookies.remove("user_infos");$cookies.remove("user_profile_infos");$cookies.remove("user_depts");ChatSocket.disconnect();$state.go('core.login',{},{reload:true});$rootScope.options={position:'toast-top-right',type:'error',iconClass:{name:'error'},timeout:'5000',extendedTimeout:'1000',html:false,closeButton:true,tapToDismiss:true,closeHtml:'<i class="fa fa-times"></i>'};var msg="Your Token is Expired!";$rootScope.openToast("Session Timeout",msg);}[39m

Executed 2 of 2 specs[31m (1 FAILED)[39m in 2 mins 55 secs.

[12:57:53] I/launcher - 0 instance(s) of WebDriver still running
[12:57:53] I/launcher - chrome #01 failed 1 test(s)
[12:57:53] I/launcher - overall: 1 failed spec(s)
[12:57:53] E/launcher - Process exited with error code 1

附加信息:尝试使用 browser.ignoreSynchronization = true; &通过xpath定位,它的工作。但我想用角度方法进行测试。 ** 网站是 Angular 网站 ** 试过: browser.driver.manage().window().setSize(1280, 1024); browser.ignoreSynchronization = false; allScriptsTimeout: 160000, 默认超时间隔:160000

请提出任何解决方案。

【问题讨论】:

  • 请给 browser.sleep(3000) 试试
  • 试过但没用。感谢您的建议。

标签: javascript angularjs selenium-webdriver protractor browser-automation


【解决方案1】:

您的页面上似乎有一个 $timeout 待处理。 由于刷新解决了它,该行为背后可能存在与登录/身份验证和页面更改相关的错误(一种时间问题,可能会使以前的承诺未解决)。

如果是这种情况,可能需要在新页面加载之前将 ControlFlow 作为最后一个操作“清空”。也许您的开发人员可以提供帮助。

作为一种解决方法,请尝试这样做

browser.waitForAngularEnabled(false); //could empty Protractors/Seleniums ChangeDetection on the ControlFlow
browser.waitForAngularEnabled(true); //will observe the ControlFlow for new promises again.

虽然,这是一个很长的尝试,我在耐心地猜测,你可能想试一试。

【讨论】:

  • 感谢恩斯特·茨温利的建议。 browser.waitForAngularEnabled(false);解决方法对我有用。
猜你喜欢
  • 2019-05-28
  • 2020-07-05
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多