Динамическое разрешение браузера для тестирования транспортира - PullRequest
0 голосов
/ 27 марта 2019

мой вопрос касается сквозного сценария тестирования с использованием адаптивного веб-приложения.Я написал свой сценарий тестирования для страниц для тестирования с различными тестовыми случаями в зависимости от разрешения экрана.Я использую переменные массива для хранения различных селекторов, связанных с одним и тем же элементом, например:

  it('should display the log in page', function () {
    gVar.signInButton = element(by.css(gVar.signInButtonSelector[gVar.SelectedMode]));
    gVar.signInButton.click().then(function(){
      expect(element(by.css(gVar.titleLoginPageSelector[gVar.SelectedMode])).getText()).toEqual(gVar.titleLoginPage[i]);
    });

Здесь я пытаюсь выбрать заголовок страницы входа, чтобы проверить его.В зависимости от разрешения, различается только селектор, и я сохранял их в массивах ...

В моем файле conf.js есть переменная параметра, которую я использую в командной строке для установки конфигурации, которую я хочуиспользуйте:

    exports.config = {
    //...

      params:{
            resolutionConfig:'default'
            },  

    //...
    }       

команда запуска может идти:

protractor conf.js --params.resolutionConfig=Classic или

protractor conf.js --params.resolutionConfig=Mobile или

protractor conf.js --params.resolutionConfig=Tablet ...

(Тогда у меня есть таблица соответствия, чтобы связать этот параметр с вышеуказанным целочисленным значением: gVar.SelectedMode)

Что я хотел бы сделать сейчас, это установить различные значения разрешения для моего браузера,разные для каждого значения параметра ResolutionConfig, который я тестирую.До сих пор я знаю, как установить это разрешение с помощью жестко закодированных значений:

    exports.config = {
    //...

    capabilities: {
        browserName: 'chrome',
        chromeOptions: {
            args: ['--window-size=100,100'] // THIS!
        }

    //...
    }       

Я слышал о "мульти-возможностях" для запуска параллельных тестов, но это не совсем то, что я хочу ... возможно ли получитьразрешение параметров в переменной и добавление к ней логики?Что-то вроде:

    if(resolutionConfig) is "mobile" then: ['--window-size=xx,xx']; 
    if(resolutionConfig) is "tablet" then: ['--window-size=yy,yy'];

1 Ответ

0 голосов
/ 27 марта 2019

Чтобы ответить на ваш первоначальный вопрос, вы можете использовать browser.driver.manage().window().setSize(), чтобы вручную установить разрешение браузера, который вы хотите.

Я не уверен, что именно в этом массиве вы упомянули, но я, вероятно, подойду к вашей проблеме по-другому:

Установка параметров:

params: {
    resolutionConfig: 'default', //could be default, mobile or tablet
    default: { //set whatever res you need
        resWidth: 1700,
        resHeight: 1500,
        titleLocator: '//div[@title="defaultTitle]"'
    },
    mobile: {
        resWidth: 800,
        resHeight: 1000,
        titleLocator: '//div[@title="mobileTitle]"'
    },
    tablet: {
        resWidth: 1200,
        resHeight: 1200,
        titleLocator: '//div[@title="tabletTitle]"'
    }
},
onPrepare: {
   //See below for explanation
  let requiredHeight = browser.params[browser.params.resolutionConfig].resHeight;
  let requiredWidth = browser.params[browser.params.resolutionConfig].resWidth;
  browser.driver.manage().window().setSize(requiredHeight, requiredWidth)
}

Вы могли бы запускать транспортир так же, как вы намеревались

protractor conf.js --params.resolutionConfig=Classic
protractor conf.js --params.resolutionConfig=Mobile
protractor conf.js --params.resolutionConfig=Tablet

Вы могли бы найти ваш динамический титровальный элемент, такой как

element(by.xpath(browser.params[browser.params.resolutionConfig].titleLocator))
//which is equivalent to 
element(by.xpath(browser.params['default'].titleLocator))
//and as we declared above
browser.params['default'].titleLocator = "//div[@title="defaultTitle]"
//so therefore we are actually doing
element(by.xpath("//div[@title="defaultTitle]"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...