Javascript selenium webdriver错误处理
当我使用SeleniumWebDriver的javascript/NodeJSAPI优雅地运行以下测试时,可能会引发一些异常,但错误信息通常过于笼统,我想知道有关错误的更多细节。例如:下面的代码可能会出现“no-soke-element”异常,但我如何知道找不到哪个元素Javascript selenium webdriver错误处理,javascript,node.js,selenium,webdriver,Javascript,Node.js,Selenium,Webdriver,当我使用SeleniumWebDriver的javascript/NodeJSAPI优雅地运行以下测试时,可能会引发一些异常,但错误信息通常过于笼统,我想知道有关错误的更多细节。例如:下面的代码可能会出现“no-soke-element”异常,但我如何知道找不到哪个元素 driver.controlFlow().execute(function(){ var el1 = driver.findElement(locator1); //maybe get a no such
driver.controlFlow().execute(function(){
var el1 = driver.findElement(locator1); //maybe get a no such elment exception
el1.click();
var el2 = driver.findElement(locator2); //maybe get a no such elment exception
el2.clear();
var el3 = driver.findElement(locator3); //maybe get a no such elment exception
el3.sendKeys('xxx');
}).thenCatch(function(err){
//boom! no such element, but i wanna know which locator not found?!!
})
错误:
{ [NoSuchElementError: no such element
(Session info: chrome=46.0.2490.86)
(Driver info: chromedriver=2.16.333243 (0bfa1d3575fc1044244f21ddb82bf870944ef961),platform=Mac OS X 10.10.1 x86_64)]
code: 7,
state: 'no such element',
message: 'no such element\n (Session info: chrome=46.0.2490.86)\n (Driver info: chromedriver=2.16.333243 (0bfa1d3575fc1044244f21ddb82bf870944ef961),platform=Mac OS X 10.10.1 x86_64)',
name: 'NoSuchElementError',
stack: 'NoSuchElementError: no such element\n (Session info: chrome=46.0.2490.86)\n (Driver info: chromedriver=2.16.333243 (0bfa1d3575fc1044244f21ddb82bf870944ef961),platform=Mac OS X 10.10.1 x86_64)\n at new bot.Error (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/atoms/error.js:108:18)\n at Object.bot.response.checkResponse (/Users/bjhl/dev/codebase/sbot/node_modules/selenium- webdriver/lib/atoms/response.js:109:9)\n at /Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:379:20\n at promise.ControlFlow.runInFrame_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium- webdriver/lib/goog/../webdriver/promise.js:1857:20)\n at goog.defineClass.notify (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:2448:25)\n at promise.Promise.notify_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:564:12)\n at Array.forEach (native)\n at promise.Promise.notifyAll_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:553:15)\n at goog.async.run.processWorkQueue (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/async/run.js:130:15)\n at runMicrotasksCallback (node.js:337:7)\nFrom: Task: WebElement.sendKeys()\n at webdriver.WebDriver.schedule (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:362:15)\n at webdriver.WebElement.schedule_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1817:23)\n at webdriver.WebElement.sendKeys (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1988:17)\n at /Users/bjhl/dev/codebase/sbot/test/testbot/other.js:8:8\n at promise.ControlFlow.runInFrame_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1857:20)\n at promise.ControlFlow.runEventLoop_ (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:1729:8)\n at eval (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/../webdriver/promise.js:2043:12)\n at goog.async.run.processWorkQueue (/Users/bjhl/dev/codebase/sbot/node_modules/selenium-webdriver/lib/goog/async/run.js:130:15)\n at runMicrotasksCallback (node.js:337:7)\n at process._tickCallback (node.js:355:11)\nFrom: Task: <anonymous>\n at Object.<anonymous> (/Users/bjhl/dev/codebase/sbot/test/testbot/other.js:5:22)\n at Module._compile (module.js:460:26)\n at Object.Module._extensions..js (module.js:478:10)\n at Module.load (module.js:355:32)\n at Function.Module._load (module.js:310:12)\n at Function.Module.runMain (module.js:501:10)\n at startup (node.js:129:16)\n at node.js:814:3' }
如何编写代码并优雅地处理错误 可以插入错误吗?可以插入错误吗?
driver.controlFlow().execute(function(){
driver.findElement(locator1).click().thenCatch(function(e){
console.error('maybe locator1 not found');
return webdriver.promise.rejected(err);
})
driver.findElement(locator2).click().thenCatch(function(e){
console.error('maybe locator2 not found');
return webdriver.promise.rejected(err);
})
.thenCatch(function(e){
//boom! no such element!!
})