Не удалось получить значение автоида в объект JobID, здесь автоид localStorage представляет собой строку

#jquery #cypress

Вопрос:

Не удалось получить значение автоида в jobId объект, здесь localStorage autoId представляет собой строку. Не мог бы кто-нибудь, пожалуйста, сообщить об этой проблеме здесь ? Я пытаюсь найти строку таблицы на основе идентификатора задания и проверяю jobRow [columnPosition] == value , утверждает ли он ее …

примечание: Я пытаюсь оптимизировать и сократить строки кода, насколько это возможно.

   let tableDatacy = "Reports_Table";
  let columnName= "Customer";
  let checkCase = "should";
  let value  = "Main Customer";
  let jobId = {};
  
  const columnPosition = Cypress.$(`[data-cy=${tableDatacy}]`)
      .find(`th:has(a:contains(${columnName}))`)
      .index()
  console.log("Get the silly index !: " columnPosition)

  cy.getLocalStorage('autoId').then(autoId => jobId = autoId.jobId);
  let jobRow = Cypress.$(`[data-cy=${tableDatacy}] > tbody > tr :contains(${jobId})`);

  if (checkCase === "should" amp;amp; jobRow [columnPosition] ==  value){
    result = "true";
    expect(result).to.include("true");
  } else if (checkCase === "should not" amp;amp; jobRow.length == 0) {
    result = "false";
    expect(result).to.include("false");
  }
 

введите описание изображения здесь

Ответ №1:

У вас есть одна асинхронная линия, а все остальные синхронны, поэтому все, от чего зависит jobId , должно входить внутрь .then() .

В противном случае синхронный код будет выполнен до завершения асинхронной строки.

 const columnPosition = Cypress.$(`[data-cy=${tableDatacy}]`)
    .find(`th:has(a:contains(${columnName}))`)
    .index()
console.log("Get the silly index !: " columnPosition)

// Make async call and everthing that needs the result 
// must be inside the callback

cy.getLocalStorage('autoId').then(autoId => {

  jobId = autoId.jobId

  // let jobRow = Cypress.$(`[data-cy=${tableDatacy}] > tbody > tr :contains(${jobId})`);
  let jobRow = Cypress.$(`[data-cy=${tableDatacy}] > tbody > tr:has(td:contains(${jobId}))`);

  // if (checkCase === "should" amp;amp; jobRow [columnPosition] ==  value){
  const jobRowText = Cypress.$(jobRow).find('td').eq(columnPosition).text()
  if (checkCase === "should" amp;amp; jobRowText === value) {
    result = "true";
    expect(result).to.include("true");
  // } else if (checkCase === "should not" amp;amp; jobRow.length == 0) {
  } else {
    result = "false";
    expect(result).to.include("false");
  }

});
 

Выбор строки

Так tr :contains(${jobId})

означает «дай мне дитя tr того , что содержит jobId , результат есть td .

но tr:has(td:contains(${jobId}))

означает «дай мне tr то, что имеет td то, что содержит jobId «.


Выбор столбца в строке и сравнение текста

Это jobRow не массив, это элемент, поэтому вам нужно использовать больше jQuery для извлечения текста для сравнения.

 const jobRowText = jobRow.find('td').eq(columnPosition).text()
if (checkCase === "should" amp;amp; jobRowText === value) {
 

ИЛИ объединить

 let jobRowText = Cypress.$(`[data-cy=${tableDatacy}] > tbody > tr:has(td:contains(${jobId}))`)
  .find('td').eq(columnPosition).text()
 

Кипарис командует способом

 cy.contains('[data-cy=${tableDatacy}] > tbody > tr', jobId)
  .find('td').eq(columnPosition)
  .invoke('text')
  .then(jobRowText => {

    if (checkCase === "should" amp;amp; jobRowText === value) {
      result = "true";
      expect(result).to.include("true");
    } else {
      result = "false";
      expect(result).to.include("false");
    }
  })


 

Комментарии:

1. Постараюсь сделать это в ближайшее время и отвечу

2. Когда я установил jobId = autoId.JobId его, он не работал, поэтому мне нужно перейти на jobId = autoId

3. Но в этой строке let jobRow я получаю 0: td.nameMaxWidth.clickable.saveBackLink length: 1 , но мне нужно получить <tr> правильно, чтобы передать положение столбца ?

4. Я добавил скриншот для справки.

5. Хорошо, да, согласен — вы хотите найти строку, которая jobId находится в одном столбце, и утверждать истину или ложь, если она value находится в номере столбца [columnPosition] . Для этого, я думаю, вы можете использовать :has() его снова.