Protractor URL更改后使用browser.getCurrentUrl()时出现超时错误
我正在为AngularJS应用程序的登录编写一个量角器测试,并希望验证登录是否成功,以及登录后url是否更改。我尝试使用urlContains()的预期条件,也尝试使用browser.getCurrentUrl().toContain()的预期条件,但两者都出现了错误Protractor URL更改后使用browser.getCurrentUrl()时出现超时错误,protractor,assertion,Protractor,Assertion,我正在为AngularJS应用程序的登录编写一个量角器测试,并希望验证登录是否成功,以及登录后url是否更改。我尝试使用urlContains()的预期条件,也尝试使用browser.getCurrentUrl().toContain()的预期条件,但两者都出现了错误 exports.config = { seleniumAddress : 'http://localhost:4444/wd/hub', specs: ['login.spec.js'], }; u
exports.config = {
seleniumAddress : 'http://localhost:4444/wd/hub',
specs: ['login.spec.js'],
};
url正确时,预期条件通过测试。但是当url不同时,它会抛出超时错误
“失败:等待在5013ms后超时”。
expect(browser.getCurrentUrl()).toContain(“/dashboard”)始终失败,并出现以下错误
Stack:
ScriptTimeoutError: script timeout: result was not received in 11 seconds
(Session info: chrome=75.0.3770.142)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.3', java.version: '12.0.1'
Driver info: driver.version: unknown
at Object.checkLegacyResponse (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:546:15)
at parseHttpResponse (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/http.js:509:13)
at doSend.then.response (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/http.js:441:30)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
From: Task: Protractor.waitForAngular()
at thenableWebDriverProxy.schedule (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:807:17)
at ProtractorBrowser.executeAsyncScript_ (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/built/browser.js:425:28)
at angularAppRoot.then (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/built/browser.js:456:33)
at ManagedPromise.invokeCallback_ (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1376:14)
at TaskQueue.execute_ (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:3084:14)
at TaskQueue.executeNext_ (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:3067:27)
at asyncRun (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2927:27)
at /Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:668:7
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
From: Task: Run it("should login successfully") in control flow
at UserContext.<anonymous> (/Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/jasminewd2/index.js:94:19)
From asynchronous test:
Error
at Object.<anonymous> (/Users/ProtractorTest/Tests/login.spec.js:17:3)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Module.require (module.js:587:17)
at require (internal/module.js:11:18)
at /Users/.nvm/versions/node/v8.9.4/lib/node_modules/protractor/node_modules/jasmine/lib/jasmine.js:93:5
我希望当url与预期的不同时,它会显示一条有效的错误消息,而不是超时错误。我有类似的想法
const currentUrl = await browser.getCurrentUrl().then(url => url);
expect(currentUrl).toContain('/dashboard')
试试看,也许会有帮助,只是不用等待,因为我看到你不使用异步函数
还是像这样
await browser.getCurrentUrl().then(url => expect(url).toContain('/dashboard'));
在量角器中,默认脚本超时为11秒, 在上面的代码片段中
browser.getCurrentUrl().then(url => expect(url).toContain('/dashboard'));
语句需要11秒以上的时间来解析承诺
解决方案:在量角器配置文件中,添加以下语句
allScriptsTimeout:timeout(以毫秒为单位)
。
e、 g为30秒超时
allScriptsTimeout: 30000
编辑的配置文件:
exports.config = {
allScriptsTimeout: 30000,
seleniumAddress : 'http://localhost:4444/wd/hub',
specs: ['login.spec.js'],
}) 默认情况下,量角器为您处理所有异步。查看您的代码,您依赖于默认的量角器行为,即未将
SELENIUM\u PROMISE\u MANAGER
设置为false
在这种情况下,为什么要在单击()中执行某些操作。然后()
?它可以简单明了
loginobj.loginbtn.click();
expect(browser.getCurrentUrl()).toContain('/dashboard')代码>
关于代码的一个理论是:一旦您在click()中找到了某个内容,那么()
,它就不适合于量角器为您处理的承诺队列。除非是绝对必要的,否则对于从元素中获取值以供以后在规范中使用,我建议尽量不要干预量角器异步处理
希望有帮助。我更新了测试,如下所示。但是我得到了“意外标识符”错误it('should login successfully',async()=>{browser.get('https://pdtest.gan-compliance.com/“”;loginobj.username.sendKeys(loginda.email);loginobj.password.sendKeys(loginda.password);loginobj.loginbtn.click()。然后(()=>{const currentUrl=wait browser.getCurrentUrl()。然后(url=>url);wait-expect(currentUrl).toContain('/dashboard')});
在一个it中混合使用两种方法时,不要等待,也可以尝试以下方法browser.getCurrentUrl()。然后(url=>expect(url).toContain('/dashboard'));
如果使用异步函数,则必须在每个loginobj步骤中使用wait。我尝试了不使用wait,也尝试了使用aync和wait。我收到错误“失败:脚本超时:11秒内未收到结果,并提供生成信息、系统信息和驱动程序信息:驱动程序。版本:未知。”在两方面cases@jane你能从stacktrace提供更多关于错误的信息,以及关于你正在测试的应用程序的信息吗?是angular/other fw吗?还有你的量角器配置很好。请编辑这篇文章。起初我认为这可能是量角器同步的错误,但看起来有些不同。更新了文章。我真的很高兴感谢你的帮助。试着去做expect(真的)。toBe(真的)
如果失败,请告诉我。我只是想消除webdriver问题。我在配置文件中添加了allScriptsTimeout:30000,但我仍然收到超时错误。登录不需要很长时间。由于某种原因,它似乎无法获取URL。我收到错误“失败:脚本超时:30秒内未收到结果”是否尝试aut使用量角器的omate非anguler网站?这是一个有角度的网站。有关量角器中所有类型的超时,请参阅下面的链接。链接:。可能会有所帮助。
exports.config = {
allScriptsTimeout: 30000,
seleniumAddress : 'http://localhost:4444/wd/hub',
specs: ['login.spec.js'],