2017-08-28 60 views
0

我正在尝试测试Vue应用程序。我有2个简单的页面对象和2个简单的spec文件。当运行测试E2E,第一个(登录)通过没有问题,但第二个失败,此错误:当初始化页面对象时,守夜失败

Error: No selector property for element "client" Instead found properties: capabilities,globals,sessionId,options,launchUrl,launch_url,screenshotsPath,Keys,session,sessions,timeouts,timeoutsAsyncScript,timeoutsImplicitWait,elemen t,elementIdElement,elements,elementIdElements,elementActive,elementIdAttribute,elementIdClick,elementIdCssProperty,elementIdDisplayed,elementIdLocationInView,elementIdLocation,elementIdName,elementIdClear,elementIdSelected,elemen tIdEnabled,elementIdEquals,elementIdSize,elementIdText,elementIdValue,submit,source,contexts,currentContext,setContext,getOrientation,setOrientation,moveTo,doubleClick,mouseButtonClick,mouseButtonDown,mouseButtonUp,execute,execut eAsync,execute_async,frame,frameParent,window,windowHandle,windowMaximize,window_handle,windowHandles,window_handles,windowSize,windowPosition,refresh,back,forward,screenshot,url,status,title,keys,cookie,acceptAlert,accept_alert, dismissAlert,setAlertText,getAlertText,dismiss_alert,sessionLog,sessionLogTypes,click,clearValue,getAttribute,getCssProperty,getElementSize,getLocation,getLocationInView,getTagName,getText,getValue,isVisible,moveToElement,setValu e,submitForm,sendKeys,switchWindow,resizeWindow,setWindowPosition,maximizeWindow,saveScreenshot,getTitle,closeWindow,init,urlHash,getCookies,getCookie,setCookie,deleteCookie,deleteCookies,injectScript,getLogTypes,getLog,isLogAvai lable,waitForElementNotPresent,waitForElementNotVisible,waitForElementPresent,waitForElementVisible,end,pause,perform,useCss,useRecursion,useXpath,page,expect,assert,verify,currentTest,parent,name at new Element (C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\page-object\element.js:11:11) at C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\page-object\page-utils.js:39:35 at Array.forEach (native) at C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\page-object\page-utils.js:35:24 at Array.forEach (native) at module.exports.createElements (C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\page-object\page-utils.js:34:14) at Object.Page (C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\page-object\page.js:19:6) at Object.parent.(anonymous function) [as tenant] (C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\core\api.js:469:16) at Object.before (C:/aquaprojects/src/bitbucket.org/scalock/tenantmanager/client/test/e2e/specs/tenants.spec.js:7:26) at Object. (C:\aquaprojects\src\bitbucket.org\scalock\tenantmanager\client\node_modules\nightwatch\lib\util\utils.js:35:8)

login.js:

module.exports = { 
    url: 'http://localhost:8080/#/login', 
    elements: { 
    app: '#app', 
    loginSection: '.login-page', 
    title: 'h3', 
    submitButton: '.btn-primary', 
    username: '#username', 
    password: '#password' 
    } 
} 

login.spec的.js:

let login = null 
module.exports = { 
    before: function (client) { 
    console.log('*********** Init login page *******************') 
    login = client.page.login() 
    }, 
    'open login page': function() { 
    login 
     .navigate() 
     .waitForElementVisible('@app', 5000) 
     .assert.elementPresent('@loginSection') 
     .assert.containsText('@title', 'Tenant Manager Login') 
    }, 
    'try to login': function() { 
    login.setValue('@username', 'administrator') 
    login.setValue('@password', '1234') 

    login.click('@submitButton') 
    login.waitForElementNotPresent('@submitButton') 
    }, 
    after: function (client) { 
    client.end() 
    } 
} 

这一个穿过,另一种,这基本上是复制/粘贴,具有一些变化,在此升失败国家统计局:

tenant = client.page.tenant()

tenant.js:

module.exports = { 
    url: 'http://localhost:8080/#/tenants', 
    elements: { 
    tab: '#tenants', 
    tenantsFilter: '.tenants-filter input', 
    statusFilter: '.status-filter input', 
    add: '.add-tenant' 
    } 
} 

tenants.spec.js:

let tenant = null 
module.exports = { 
    before: function (client) { 
    console.log('*********** Init tenant page *******************') 
    tenant = client.page.tenant() 
    }, 
    'open tenant page': function() { 
    console.log('*********** Navigating to tenant page *******************') 
    tenant 
     .navigate() 
     .waitForElementVisible('@tab', 5000) 
     .assert.elementPresent('@tenantsFilter') 
     // .assert.containsText('@title', 'Tenant Manager Login') 
    }, 
    after: function (client) { 
    client.end() 
    } 
} 

nightwatch.conf.js:

require('babel-register') 
var config = require('../../config') 

// http://nightwatchjs.org/gettingstarted#settings-file 
module.exports = { 
    src_folders: ['test/e2e/specs'], 
    output_folder: 'test/e2e/reports', 
    custom_assertions_path: ['test/e2e/custom-assertions'], 
    "page_objects_path" : "test/e2e/pages", 
    selenium: { 
    start_process: true, 
    server_path: require('selenium-server').path, 
    host: '127.0.0.1', 
    port: 4444, 
    cli_args: { 
     'webdriver.chrome.driver': require('chromedriver').path 
    } 
    }, 

    test_settings: { 
    default: { 
     selenium_port: 4444, 
     selenium_host: 'localhost', 
     silent: true, 
     globals: { 
     devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 
     } 
    }, 

    chrome: { 
     desiredCapabilities: { 
     browserName: 'chrome', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    }, 

    firefox: { 
     desiredCapabilities: { 
     browserName: 'firefox', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    } 
    } 
} 
+0

你能否提供配置文件 –

+0

@BaoTran - 更新了问题 – Tomer

回答

0

您还没有定义的页面对象路径

require('babel-register') 
var config = require('../../config') 

// http://nightwatchjs.org/gettingstarted#settings-file 
module.exports = { 
    src_folders: ['test/e2e/specs'], 
    output_folder: 'test/e2e/reports', 
    custom_assertions_path: ['test/e2e/custom-assertions'], 
    "page_objects_path" : "test/e2e/pages", //page-object path 
    selenium: { 
    start_process: true, 
    server_path: require('selenium-server').path, 
    host: '127.0.0.1', 
    port: 4444, 
    cli_args: { 
     'webdriver.chrome.driver': require('chromedriver').path 
    } 
    }, 

    test_settings: { 
    default: { 
     selenium_port: 4444, 
     selenium_host: 'localhost', 
     silent: true, 
     globals: { 
     devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 
     } 
    }, 

    chrome: { 
     desiredCapabilities: { 
     browserName: 'chrome', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    }, 

    firefox: { 
     desiredCapabilities: { 
     browserName: 'firefox', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    } 
    } 
} 

创建一个目录“页”,并把租户进去。

+0

对不起,这是我的错误,我发布了错误的配置。我没有定义它,就像我说的登录页面对象工作得很好。 – Tomer