WebDriverError:当JavaScript中的XPath表达式为null时,找不到元素



我正在测试远程服务器上的登录页面,而硒则向我抛出了上述错误。但是,当我在本地服务器上测试相同的代码时,它可以很好地工作。我无法理解为什么远程服务器会丢失错误,而当两个站点上的硒版本完全相同时,本地服务器也不会。最初,我使用了:

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());

我的两美分...我在下面报告了我的观察。我能够通过在elementFinderxpath中传递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(),因为它们与量角器控制流不同步,并且在

之间发生的任何事情都可能发生。

相关内容

最新更新