Невозможно прочитать свойство $$ undefined javascript webdriverio - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь получить доступ к вложенному веб-элементу с помощью инфраструктуры webdriverio.

У меня есть следующий код

function selectSales(sfilters, salesflowName) {
  const sflow = $$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;
  });

/* The below is to select the checkbox from a list of checkboxes under 
the parent */  
sfilters.forEach(fil => {
    sflow.$$("mat-list-option").find(el => { //* > This is where I am getting error.
        return el.getText().includes(fil);
    }).$('mat-pseudo-checkbox').click();
  });
}

Я получаю Cannot read property '$$' of undefined

Не знаю почему ошибка обнаруживается. 'sflow' - родительский webelement, а доступ к дочерним элементам с помощью $$("mat-list-option") - это место, где появляется ошибка.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Похоже, ваш селектор недействителен. Разве это не должно быть так (селектор для поиска класса)?

const sflow = $$(".app-filters-manager .app-salesflow-panel .mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;`

То же самое в других селекторах. И find должен вернуть одного потомка, так что все в порядке.

Но если оно действительно, вы уверены, что элементы находятся в DOM?

0 голосов
/ 27 апреля 2020

Ваша переменная sflow не определена, что означает, что следующее выражение ничего не возвращает.

$$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => {
        return element.getText() === salesflowName;
  });

Это может произойти по нескольким причинам:

  1. Вы уверены, что $$("app-filters-manager app-salesflow-panel mat-expansion-panel") возвращает родительский элемент искомого элемента? Правильно ли выбран селектор?

  2. Помните, что find () проходит и находит потомков вашего $$("app-filters-manager app-salesflow-panel mat-expansion-panel") селектора. Это также может вернуть несколько детей. Если этот селектор уже является элементом, который вы хотите использовать, удалите следующую часть:

const sflow = $$ ("mat app-filters-manager-app-salesflow-panel -expansion-panel ") .find (element => {return element.getText () === salesflowName;}) ;

Убедитесь, что вы передаете правильное значение для salesflowName param

element.getText(), возможно, возвращает некоторый текст с пробелами в нем. Попробуйте element.getText().trim()

В основном вам необходимо убедиться, что значение переменной sflow инициализировано. Независимо от того, является ли проблема с вашим селектором, параметром salesflowName или пробелом, не прошедшим тест на равенство, необходимо выяснить путем отладки.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...