Гаугейс с тайко ведут себя неожиданно с таблицами данных - PullRequest
1 голос
/ 23 июня 2019

Похоже, что взаимодействие элементов внутри строки таблицы foreach не работает должным образом, элементы не найдены и метод записи не записывает

При создании следующего шага

* Create following task
  | fiels | value          |
  |-------|----------------|
  | name  | test task name |
  | type  | urgent         |

и разбореtable

step("Create following task <table>", async (table) => {
  await click($('.add-task'));
  table.rows.forEach( async row => {
    switch(row.cells[0]) {
      case 'name':
        await write(row.cells[1], into(inputField({placeholder:"Type here"}, toRightOf('Name of the task'))));
      case 'type':
        await click($('.input-text', toRightOf('Type of task')));
       await write(row.cells[1]);
   }
  click('Create');
});

Методы записи не пишут ничего, даже если я помещаю waitfor или waitforstart, но они работают, если я запускаю их в отдельных шагах вне цикла,

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Проблема здесь не с gauge или gauge-js или taiko.Узел forEach не обрабатывает обратные вызовы async.Таким образом, любой await внутри обратного вызова не будет рассматриваться, и цикл перейдет к следующему элементу без завершения первой задачи.Следующий поток объясняет это поведение и рассказывает о некоторых изящных обходных путях.

Использование async / await с циклом forEach

0 голосов
/ 23 июня 2019

@ nonyck Спасибо за сообщение о проблеме.

Вот обходной путь. Используйте цикл вместо foreach, как показано ниже

HTML

<!DOCTYPE html>
<html>
<body>

<h2>HTML Forms</h2>

<form action="/action_page.php">
  First name:  <input type="text" name="firstname" placeholder="first">
  <br>
  Last name:  <input type="text" name="lastname" placeholder="last">
  <br><br>
  <input type="submit" value="Submit">
</form> 

<p>If you click the "Submit" button, the form-data will be sent to a page called "/action_page.php".</p>

</body>
</html>
* Create following task
  | fiels  | value          |toRightOf  |
  |--------|----------------|-----------|
  | first  | test task name |First name:|
  | last   | urgent         |Last name: |
step("Create following task <table>", async function(table) {
    for(var i=0;i<table.rows.length;i++)
    {
        console.log(table.rows[i].cells[0])
        console.log(table.rows[i].cells[1])
        console.log(table.rows[i].cells[2])
        await write(table.rows[i].cells[1], into(textBox({placeholder:table.rows[i].cells[0]}, toRightOf(table.rows[i].cells[2]))));
    }

Проблема с foreach может быть отслежена на https://github.com/getgauge/taiko/issues/646. Пожалуйста, не стесняйтесь добавлять больше деталей / мыслей.


Вот пара наблюдений

  • Вы используете await write(row.cells[1], into(inputField({placeholder:"Type here"}, toRightOf('Name of the task'))));

С заполнителем "Введите здесь" и toRightOf(<hard coded value>), вы будете выбирать один и тот же элемент снова и снова. Потому что только потому, что значение добавлено в текстовое поле, заполнитель не становится недействительным.

  • $ - запасной вариант для выбора элементов. Вы можете использовать click(<wordings visible on screen>). Тайко позаботится о том, чтобы найти элемент для вас.

PS: Если вы сможете поделиться этим HTML-кодом, он сможет вам лучше помочь!

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