Как получить возвращаемое значение из js, выполняющегося с использованием browser.executeScript в транспортире? - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь получить значение из функции execute script и сопоставить его с ожидаемым методом.Поскольку isSelected не работает на многих флажках, которые используются в приложении, я должен идти по этому пути.Вот мой код, и я очень ценю вашу помощь.

Я пытался использовать isSelected с такими флажками, но это не работает.Ниже код дает мне следующую ошибку.Ошибка: не удается прочитать свойство 'getText' с нулевым значением

exports.verifyRegularCheckboxChecked = function () {
  browser.driver.executeScript(function() {
    var special_list = $('div > div');
    var returnValue = 'itIsTrue';
    var label, label_children;
    special_list.filter(function(index, elem) {
      label = elem.children;
      label_children = $(label).children();
      label_children.filter(function(nestedIndex, nestedElem) {
        if(nestedElem.tagName === 'INPUT') {
          if(nestedElem.checked) {
            return returnValue;
            }
          }
        });
      });
    }).then(function (returnValue) {
    expect(returnValue.getText()).toBe('itIsTrue');
  });
};

HTML-код:

<div class="form-group">
  <div class="checkbox"> 
    <label> 
       <input class="ark-checkbox ng-untouched ng-valid ng-dirty ng-valid-parse" 
             ng-model="block.properties.milestoneIsVariable.value" type="checkbox"> 
       <span aria-label="ark-checkbox"> ::before </span> use variable 
     </label> 
  </div>
</div>

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Итак, я заставил его работать, изменив мой код следующим образом.

exports.verifyRegularCheckboxChecked = function () {
  var result = browser.driver.executeScript(function() {
    var returnValue = false;
    var special_list = $('div > div');
    var label, label_children;
    special_list.filter(function(index, elem) {
      label = elem.children;
      console.log('inner text is: ' + label.textContent);
      label_children = $(label).children();
      label_children.filter(function(nestedIndex, nestedElem) {
        if(nestedElem.tagName === 'INPUT') {
          if(nestedElem.checked) {
            returnValue = true;
            }
          }
        });
      });
    return returnValue;
    });
  result.then(function (value) {
    expect(value).toBeTruthy();
  });
};
0 голосов
/ 24 апреля 2019

Для фильтра в jQuery (функция) вам необходимо вернуть логическое значение.

exports.verifyRegularCheckboxChecked = function () {

  let result = browser.driver.executeScript(function() {

    let special_list = $('div > div');
    let label, label_children;

    let checkedList = special_list.filter(function(index, elem) {
      label = elem.children;
      label_children = $(label).children();

      return label_children.filter(function(nestedIndex, nestedElem) {
        return estedElem.tagName === 'INPUT' && nestedElem.checked;
      }).length > 0;

    });

    // return matched Dom element
    return checkedList.length > 0 && checkedList.get(0);        
  }); // end of executeScript

  expect(result.getText()).toBe('itIsTrue');
};

На самом деле вы можете упростить код следующим образом:

exports.verifyRegularCheckboxChecked = function () {

  let result = browser.driver.executeScript(function() {

    return $('div > div').filter(function(){ 
      return $('input:checked', this).length > 0;
    })
    .get(0);

  });

  expect(result.getText()).toBe('itIsTrue');
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...