我正在测试远程服务器上的登录页面,而硒则向我抛出了上述错误。但是,当我在本地服务器上测试相同的代码时,它可以很好地工作。我无法理解为什么远程服务器会丢失错误,而当两个站点上的硒版本完全相同时,本地服务器也不会。最初,我使用了:
browser.driver.findElement(By.xpath(desiredXpath)).click()
单击任何按钮。然后,我尝试制作一种仅执行点击操作的方法,以便该方法本身可以执行每个点击操作。为此我使用了:
browser.executeScript('arguments[0].click()', driver.findElement(By.xpath(desiredXpath)))
上线在本地服务器上完美执行,但无法识别远程服务器上的XPATH,因此会引发错误,WebDrivererror:当Xpath表达式为null时找不到元素。
我使用控制台语句在此行执行之前打印XPATH。它打印了要找到元素的XPath。
有什么建议?
您可能需要等待该元素的存在:
var elm = element(by.xpath(desiredXpath));
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(elm), 5000);
elm.click();
// or browser.executeScript("arguments[0].click();", elm.getWebElement());
我的两美分...我在下面报告了我的观察。我能够通过在elementFinder
的xpath
中传递null
来重现上述错误,该错误是在browser.executeScript
使用a = null
执行时,以下代码抛出了我们正在寻找
it('check', function () {
browser.get("http://www.protractortest.org/");
//var a = "//a[contains(@class,'github')]";
var a = null;
browser.executeScript('arguments[0].click()', element(by.xpath(a)))
});
错误堆栈
Stack:
WebDriverError: Cannot find elements when the XPath expression is null.
at WebDriverError (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverliberror.js:27:10)
at Object.checkLegacyResponse (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverliberror.js:639:15)
at parseHttpResponse (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverhttpindex.js:538:13)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverhttpindex.js:472:11
at ManagedPromise.invokeCallback_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:1379:14)
at TaskQueue.execute_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2913:14)
at TaskQueue.executeNext_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2896:21)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2820:25
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:639:7
at process._tickCallback (node.js:369:9)
From: Task: WebDriver.findElements(By(xpath, null))
at WebDriver.schedule (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibwebdriver.js:377:17)
at WebDriver.findElements (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibwebdriver.js:926:22)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractorbuiltelement.js:161:44
at ManagedPromise.invokeCallback_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:1379:14)
at TaskQueue.execute_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2913:14)
at TaskQueue.executeNext_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2896:21)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2775:27
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:639:7
at process._tickCallback (node.js:369:9)
From: Task: WebDriver.executeScript()
at WebDriver.schedule (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibwebdriver.js:377:17)
at WebDriver.executeScript (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibwebdriver.js:526:16)
at ProtractorBrowser.to.(anonymous function) [as executeScript] (C:UsersadityaAppDataRoamingnpmnode_modulesprotractorbuiltbrowser.js:59:29)
at Object.<anonymous> (C:UsersadityaWebstormProjectsdemodemo2.js:10:17)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesjasminewd2index.js:94:23
at new ManagedPromise (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:1082:7)
at controlFlowExecute (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesjasminewd2index.js:80:18)
at TaskQueue.execute_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2913:14)
at TaskQueue.executeNext_ (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2896:21)
at C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesselenium-webdriverlibpromise.js:2820:25
From: Task: Run it(" through Gmail Account") in control flow
at Object.<anonymous> (C:UsersadityaAppDataRoamingnpmnode_modulesprotractornode_modulesjasminewd2index.js:79:14)
From asynchronous test:
Error
at Suite.<anonymous> (C:UsersadityaWebstormProjectsdemodemo2.js:5:5)
at Object.<anonymous> (C:UsersadityaWebstormProjectsdemodemo2.js:4:1)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
1 spec, 1 failure
Finished in 1.957 seconds
可能的根本原因可能是变量 desiredXpath
是通过null传递的,我们不能使用console.log()
,因为它们与量角器控制流不同步,并且在