javascript - 是否内置选择器选项以使用 nightwatchjs 做出复杂的决策?

标签 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()

这里显然需要更多的逻辑,因为它没有夜巡所具有的所有内置功能,但这应该让我知道我正在尝试做什么。

最佳答案

您可以在 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();

关于javascript - 是否内置选择器选项以使用 nightwatchjs 做出复杂的决策?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402386/

相关文章:

node.js - 查看 NodeJs 版本并已安装

mysql - 我想在nodejs中的mysql中添加一个变量

javascript - mikeal的request与Node.js中http/https模块的对比

python - 由于 Python 和 Selenium 中的元音变音而出现错误

python-3.x - 使用 chrome canary 执行 selenium python 脚本时如何抑制控制台错误/警告/信息消息

java - Firefox WebDriver 在调用 findElement() 时不会抛出 NoElementFoundException 而是挂起?

javascript - 当我设置这些时,为什么我的表单不进行验证检查?

javascript - 如何更改已访问的 cgridview 行的颜色?

javascript - 在 jQuery 中使用 .hide() 和 .show()

javascript - 在 app-root 中垂直对齐我的加载程序 - Angular2+