types错误By.css(tagName)

我似乎无法弄清楚是什么导致typeError或为什么。 基本上所有我想要做的是获得当前选定的框架的名称。 下面是代码和错误。

this.getCurrentFrameName = function(driver) { var frames = driver.findElements(driver.By.css('frame')); for (var frame in frames) { if (frame.isSelected()) { return frame.getName; } } }; 

错误

 TypeError: Cannot read property 'css' of undefined at getCurrentFrameName (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\src\FrameHandler.js:21:75) at Context.<anonymous> (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\test\FrameHandlerTest.js:17:29) at callFn (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runnable.js:315:21) at Test.Runnable.run (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runnable.js:308:7) at Runner.runTest (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:422:10) at C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:533:12 at next (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:342:14) at C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:352:7 at next (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:284:14) at Immediate._onImmediate (C:\Users\charles.sexton\WebstormProjects\JS-Selenium-Toolkit\node_modules\mocha\lib\runner.js:320:5) 

编辑:我想包括testing内的一切,我仍然得到像以前一样的错误。 我没有包含期望,断言或应该的陈述。

 var expect = require('chai').expect; var FrameHandler = require('../../JS-Selenium-Toolkit/src/FrameHandler.js'); var webdriver = require('selenium-webdriver'); /** required imports for Google Chrome without setting the PATH environment variable */ var chrome = require('selenium-webdriver/chrome'); var chromePath = require('selenium-chromedriver').path; describe('FrameHandler', function() { var frameHandler = new FrameHandler(); it('', function() { var service = new chrome.ServiceBuilder(chromePath).build(); chrome.setDefaultService(service); var driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .build(); driver.get('http://google.com'); var frames = driver.findElements(driver.By.css('frame')); console.log(frames.length()); for (var frame in frames) { console.log(frame.getName); if (frame.isSelected()) { console.log(frame.getName); return frame.getName; } } }); 

});

正如@amitbobade刚刚观察到的, By不是构造器对象driver的属性,而是selenium webdriver API实例webdriver的属性。

(对于任何Java读者,这相当于试图调用WebDriver 实例上的By.css()而不是WebDriver 。)

所以使用webdriver.By ,而不是driver.By

你可以看到使用console.log的差异。 如果你在webdriver上做到这一点,你可以看到以下内容:

 webdriver = { ActionSequence: [Function: ActionSequence], Browser: { ANDROID: 'android', CHROME: 'chrome', [...] HTMLUNIT: 'htmlunit' }, Builder: [Function: Builder], Button: { LEFT: 0, MIDDLE: 1, RIGHT: 2 }, By: [Function: name(name) { return By.css('*[name="' + escapeCss(name) + '"]'); }], Capabilities: [Function: Capabilities], Capability: { ACCEPT_SSL_CERTS: 'acceptSslCerts', [...]