Встроены ли параметры выбора для принятия сложных решений с использованием nightwatchjs?

Как использовать инструмент JavaScript Selenium под названием NightWatch, что является хорошей практикой для определения частей графического интерфейса перед применением теста? Например, найти, есть ли на A или B, а затем провести отдельные тесты. Другой пример: определите, вошли ли вы в систему, чтобы вы не продолжали входить в систему и т. Д. Кажется, когда я использую оператор if с селекторами, он хочет потерпеть неудачу, если я получу параметр else.

Я использовал Python API в течение длительного времени, и у вас есть доступ ко всем библиотекам Python, вы можете использовать Selenium Selectors для проверки, без ошибок и т. д. Я даже использовал npm Selenium API с аналогичными результатами, хотя все еще зеленый как это работает, но я не могу заставить слой NightWatch делать что-то еще, кроме прохождения или неудачи E2E, независимо от того, что я пытаюсь.

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

Вот общий пример на Python, который я мог бы использовать для проверки параметров A/B, которые работают...

# so you know what EC is
from selenium.webdriver.support import expected_conditions as EC

...

try:
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#foo')))
    driver.find_element_by_css_selector('#blah1 a').click()
except:
    driver.find_element_by_css_selector('#blah2 a').click()

И еще один, возможно, более чистый способ сделать это в Python...

if len(driver.find_elements_by_css_selector('#blah1 a')) > 0:
    driver.find_element_by_css_selector('#blah1 a').click()
else:
    driver.find_element_by_css_selector('#blah2 a').click()

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


person Shane    schedule 23.05.2016    source источник
comment
Можете ли вы привести пример с API JS или Python, показывающий поведение, которое вы не можете воспроизвести с помощью nightwatchjs?   -  person Florent B.    schedule 24.05.2016
comment
@ФлорентБ. Я только что предложил очень общий хак для исключения try, используемый в Python для достижения этой цели. По сути, цель здесь заключается не в том, чтобы увидеть, можете ли вы получить доступ к одному из них, а в том, чтобы определить, какой вариант вам доступен, и использовать его. Затем с этой точки делает ваше утверждение.   -  person Shane    schedule 24.05.2016


Ответы (1)


Вы можете использовать условные операторы с Nightwatch.js, но их необходимо поместить в обратный вызов, поскольку программирование является асинхронным. Вот пример, чтобы щелкнуть ссылку и утвердить заголовок в зависимости от наличия элемента:

client
  .url('http://stackoverflow.com/')
  .elements('css selector', '#abcd', function(result) {
      if (result.value.length) {  // if element is present
          client.click('#nav-questions');
          client.assert.title("Newest Questions - Stack Overflow");
      } else {
          client.click('#nav-askquestion');
          client.assert.title("Ask a Question - Stack Overflow");
      }
  })
  .end();
person Florent B.    schedule 24.05.2016