Как проверить, равен ли массив текстовых значений DOM-узла определенной строке? - PullRequest
0 голосов
/ 16 февраля 2019

Цель состоит в том, чтобы взять массив имен и проверить, все ли они равны e2e.У меня есть коллекция объектов, созданных через транспортир element.all(by.css(...).На следующем шаге мне нужно проверить, есть ли в массиве элемент с текстовым значением, отличным от того, что мне нужно.

Я попытался создать массив из имеющейся у меня коллекции и проверить его с помощьюArray.some метод, подобный следующему:

const accountNames = element.all(by.css('td > p:nth-child(3)'))
const notMatch = Array.from(accountNames).some(element => 
element.getText() !== 'e2e')

expect(notMatch).toBeFalsy()

Я ожидаю получить массив строк и логический результат для сравнения элементов с определенным текстом.

Я получаю пустой массив, хотя,В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это работает, как и ожидалось, но мне интересно, есть ли ответ, который выглядит лучше:

it('filters kits by account hierarchy', () => {
mapPage.filter('e2e')
const accNames = element.all(by.css('td > p:nth-child(3)')).getText()
.then(text => Array.from(text).some(elem => elem !== 'e2e'))

expect(accNames).toBeFalsy()
})
0 голосов
/ 16 февраля 2019

Существует несколько методов, которые можно вызвать для массивов элементов , которые вы можете увидеть здесь .Я бы выполнил это, используя либо фильтр, либо уменьшение.

Есть два дальнейших подхода, которые вы можете попробовать, но я не уверен, что они более прямолинейны, чем решение, которое вы придумали.

Уменьшить

//Using reduce we will call a function on every element in an array and 
// end up with a single value (true ro false in this case)
let allValuesAreE2E = $$('td > p:nth-child(3)').reduce(function (acc, elem) {
    //If accumlator value is false
    if (!acc) return false;

    //return whether or not 
    return elem.getText().then(function (text) {
        return text === 'e2e';
    });
}, 'initVal');

expect(allValuesAreE2E).toBeFalsy();

Фильтр выполнит функцию для каждого элемента в массиве и удалит те, которые не удовлетворяют определенному условию (в вашем случае text = e2e)

const allContainE2E = $$('td > p:nth-child(3)')).count().then(numElements => 
  return numElements === $$('td > p:nth-child(3)')).filter(element => {
        return element.getText().then(text => text === 'e2e')
      })
  })
{

expect(allContainE2E.count()).toBeGreaterThan(0) // use Jasmine
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...