是否内置了选择器选项以使用 nightwatchjs 做出复杂的决定?

Is selector options built in to make complex decisions using nightwatchjs?

使用名为 NightWatch 的 JavaScript Selenium 工具,在应用测试之前确定 GUI 部分的最佳做法是什么?例如,查找是否在 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()

这里显然需要更多的逻辑,因为它没有 nightwatch 拥有的所有内置插件,但这应该让我知道我正在尝试做什么。

您可以在 Nightwatch.js 中使用条件语句,但由于编程是异步的,因此需要将其放在回调中。 以下是单击 link 并根据元素的存在断言标题的示例:

client
  .url('http://whosebug.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();