Intern JS CSS 选择器使用变量
Intern JS CSS Selector use Variable
嘿伙计们,我的功能测试需要帮助,我希望能够在 findCssSeclector.I 中使用变量,使用一个名为 Persona 的数组,它应该读出放在变量中的国家代码,而不是在实习生职能。但它不起作用,有人有想法吗?
这个工作正常:
.type(persona["firstName"])
这不是
.findByCssSelector('select#billingAddress\.country > option:nth-child(countrycode)')
感谢您的帮助。
define([
'intern!object',
'intern/chai!assert',
'require',
'intern',
'tests/support/personas',
'intern/dojo/node!fs'
], function (RegistrationPage, assert, require, intern, personas, fs) {
var heute = new Date();
var RegistrationPage;
RegistrationPage = {
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
.findByCssSelector('select#billingAddress\.country > option:nth-child(countrycode)')
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
解决方案
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
代码示例:
define([
'intern!object',
'intern/chai!assert',
'require',
'intern',
'tests/support/personas',
'intern/dojo/node!fs'
], function (RegistrationPage, assert, require, intern, personas, fs) {
var heute = new Date();
var RegistrationPage;
RegistrationPage = {
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
**.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')**
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
无论是 Intern 还是 JS 都不会在字符串中插入简单的变量名,所以
'select#billingAddress\.country > option:nth-child(countrycode)'
只是一个简单的字符串。如果你想使用国家代码变量,你会做
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
或者,由于您只是将其从 persona
对象中拉出,您可以这样做
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + persona['Country'] + ')')
countrycode
听起来不像 nth-child
会理解的东西,尽管(数字、'odd'、'even'、'2n+1' 等),所以让选择器使用变量可能不会给你带来太多好处。
嘿伙计们,我的功能测试需要帮助,我希望能够在 findCssSeclector.I 中使用变量,使用一个名为 Persona 的数组,它应该读出放在变量中的国家代码,而不是在实习生职能。但它不起作用,有人有想法吗?
这个工作正常:
.type(persona["firstName"])
这不是
.findByCssSelector('select#billingAddress\.country > option:nth-child(countrycode)')
感谢您的帮助。
define([
'intern!object',
'intern/chai!assert',
'require',
'intern',
'tests/support/personas',
'intern/dojo/node!fs'
], function (RegistrationPage, assert, require, intern, personas, fs) {
var heute = new Date();
var RegistrationPage;
RegistrationPage = {
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
.findByCssSelector('select#billingAddress\.country > option:nth-child(countrycode)')
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
解决方案
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
代码示例:
define([
'intern!object',
'intern/chai!assert',
'require',
'intern',
'tests/support/personas',
'intern/dojo/node!fs'
], function (RegistrationPage, assert, require, intern, personas, fs) {
var heute = new Date();
var RegistrationPage;
RegistrationPage = {
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
DE: function (session, csv) {
var persona = personas[csv]
var countrycode = (persona["Country"]);
this.timeout = 500000;
return session
//Adress Page
//Firstname
.setFindTimeout(500000)
.findByCssSelector('input[id="billingAddress.firstName"]')
.click()
.type(persona["firstName"])
.end()
//Lastname
.findByCssSelector('input[id="billingAddress.lastName"]')
.click()
.type(persona["lastName"])
.end()
//Country
**.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')**
.click()
.end()
//1.Country 2.DT 3.AT 4.CH 5.NL 6.DK 7.SE 8.LU 9.BE
//Streetname
.findByCssSelector('input[id="billingAddress.street"]')
.click()
.type(persona["streetName"])
.end()
//streeNumber
.findByCssSelector('input[id="billingAddress.streetNumber"]')
.click()
.type(persona["streetNumber"])
.end()
//Postcode
.findByCssSelector('input[id="billingAddress.zip"]')
.click()
.type(persona["PostalCode"])
.end()
//City
.findByCssSelector('input[id="billingAddress.city"]')
.click()
.type(persona["city"])
.end()
//Birthday
//0-31 Days
.findByCssSelector('select#customer\.profile\.dateOfBirth_day > option:nth-child(3)')
.click()
.end()
//0-12 Months
.findByCssSelector('select#customer\.profile\.dateOfBirth_month > option:nth-child(3)')
.click()
.end()
//0-82 Years
.findByCssSelector('select#customer\.profile\.dateOfBirth_year > option:nth-child(3)')
.click()
.sleep()
.end()
//Registration
.findByCssSelector('input[id="email"]')
.click()
.type('clark' + Math.floor(Math.random()*10000000000)+'@testing.qa')
.end()
.findByCssSelector('input[id="password"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('input[id="password2"]')
.click()
.type('qasecret')
.end()
.findByCssSelector('span.glyphicon.glyphicon-chevron-down')
.click()
.end()
.findByCssSelector('input[id="voucherCode"]')
.click()
.type('SALES')
.end()
.takeScreenshot()
.then(function(data) {
fs.writeFileSync("/tmp/Screenshot/Registration_" + heute + ".png", data, 'base64');
})
//Submit
.findByCssSelector('#order_form_section input[type=submit]')
.click()
.sleep(5000)
.end()
}
};
return RegistrationPage;
});
无论是 Intern 还是 JS 都不会在字符串中插入简单的变量名,所以
'select#billingAddress\.country > option:nth-child(countrycode)'
只是一个简单的字符串。如果你想使用国家代码变量,你会做
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + countrycode + ')')
或者,由于您只是将其从 persona
对象中拉出,您可以这样做
.findByCssSelector('select#billingAddress\.country > option:nth-child(' + persona['Country'] + ')')
countrycode
听起来不像 nth-child
会理解的东西,尽管(数字、'odd'、'even'、'2n+1' 等),所以让选择器使用变量可能不会给你带来太多好处。