Rails Capybara не обнаруживает жизнеспособность гибкого элемента - PullRequest
1 голос
/ 23 января 2020

Я делаю display: flex элемент по нажатию кнопки, а затем display: none к тому же элементу после некоторых ajax вызовов. Я делаю интеграционное тестирование для того же, используя Capybara с Selenium драйвером. Проблема в том, что капибара обнаруживает видимость элемента, а иногда - нет, даже если элемент виден. Я пытался дать разные значения wait, но иногда это работает, а иногда нет. Могу ли я исправить это? Код выглядит следующим образом:

ele.addEventListener('change', () => {
  showSpinner(true);
  ajaxCall().then(() => showSpinner(false));
}

showSpinner = (flag) => {
  let spinner = document.getElementById('spinner');
  if (!spinner) {
    return;
  } else if (flag) {
    spinner.classList.add('show');
  } else {
    spinner.classList.remove('show');
  }
};

.spinner.show {
  display: flex;
}

.spinner {
  display: none;
  // other properties
}

В тестовом файле

choose 'radio_button' // if radio button
select 'some text', from: 'dropdown_element' // if dropdown
assert page.has_css?('.spinner', wait: 0)

Иногда это работает, а иногда нет. Элемент выбран или щелкнул. Это работает. Но не has_css. Также я попытался использовать assert_css, но я получаю ошибку. Так как же написать тестовый пример для вышеуказанной проблемы?

1 Ответ

0 голосов
/ 23 января 2020

Я решил проблему, как показано ниже. Я нашел ответ от комментария @Thomas Walpole на этот вопрос Проверьте видимость элемента, которая видна менее чем на секунду в Rails Capybara , которую я задал. Проблема заключалась в том, что иногда ответ ajax был очень быстрым, а иногда медленным. Так что все, что мне нужно было, чтобы замедлить работу сети.

// Set the latency time through selenium before the click or select and then check 
// for the visibility of the element on page and then again change back the latency

page.driver.browser.network_conditions = { offline: false, latency: 2000, throughput: 789 }
choose 'radio_button' // if radio button
select 'some text', from: 'dropdown_element' // if dropdown
assert page.has_css?('.spinner', wait: 0)
page.driver.browser.network_conditions = { offline: false, latency: 0, throughput: 0 }
// continue with other tests

Это сработало для моей проблемы. Не стесняйтесь улучшать это решение.

...