Переменная JS CSS Intern использует переменную

Эй, ребята, мне нужна помощь с моим функциональным тестом, я хочу иметь возможность использовать переменную в findCssSeclector. Я использую массив с именем Persona, он должен считывать код страны, вставленный в переменную, а затем в функцию intern. Но это не работает, у кого-нибудь есть идея?

Это работает нормально:

.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;
    });

1 ответ

Решение

Ни Intern, ни JS не будут интерполировать простые имена переменных в строках, поэтому

'select#billingAddress\\.country > option:nth-child(countrycode)'

это просто строка Если вы хотите использовать переменную countrycode, вы должны сделать

.findByCssSelector('select#billingAddress\\.country > option:nth-child(' + countrycode + ')')

Или, так как вы просто вытаскиваете его из persona объект, вы могли бы просто сделать

.findByCssSelector('select#billingAddress\\.country > option:nth-child(' + persona['Country'] + ')')

countrycode не похоже на что-то nth-child будет понимать, хотя (число, "нечетное", "четное", "2n+1" и т. д.), поэтому использование селектора переменной может не стоить вам много.

Другие вопросы по тегам