内置选择器选项以使用nightwatchjs做出复杂的决策吗?

时间:2016-05-23 23:58:35

标签: javascript node.js selenium selenium-webdriver nightwatch.js

使用名为NightWatch的JavaScript Selenium工具,在应用测试之前确定GUI的各个部分有什么好的做法?例如,在A或B上查找是否有单独的测试。另一个例子,确定是否已登录,因此您不会继续登录等。似乎当我对选择器使用if语句时,如果我得到else选项,它会失败。

我已经使用了Python API很长一段时间了,你可以访问所有的Python库,你可以使用Selenium选择器进行验证,而不会导致错误等。我甚至使用了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()

这里显然需要更多逻辑,因为它没有夜视仪所有的内置插件,但这应该让我知道我想要做什么。

1 个答案:

答案 0 :(得分: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();