TDD 学习笔记。
写在前面
本场测试的star是 Capybara。
考虑到自己写的method还是挺多的,就没有一一integration test了。
实作了简单的首页测试,用户注册,用户登录,用户退出。
记录下遇到的问题,顺带加入了debug的部分。
正文
- Capybara::ElementNotFound: Unable to find visible link or button “ 登出”
做登录,登出的测试时,终端报出如下错误:
报错显示页面找不到“ 登出”这个link 或者button,对应的测试文件长这样:
怎么破?
第一想法就是查看一下用户登录后,点击”Hi!, #{user.username}”,页面这时候是长啥样,是不是真的没有“ 登出”这个link 或者button。
怎么做呢?好办,加入save_and_open_page
, 注释掉报错的代码,像这样👇:
终端再次运行案例,得到这样的一串网址:
终端输入:open tmp/capybara/capybara-201710230848216776109515.html
, 浏览器便会打开这个网址了。
我的是这样子:
有登出呢!为什么显示Unable to find visible link or button ?那只能说明这不是一个link or button?Google后,发现在stackoverflow上有个非常相似的案例:How to use capybara in rspec to click on a dropdown option
试试把click_on" 登出"
换成page.find(:xpath, "//a[@href='/users/sign_out']").click
, 终端再次运行案例,Pass!!
but ,xpath是啥?XPath 是一门在 XML 文档中查找信息的语言,用于在 XML 文档中通过元素和属性进行导航。
了解更多可以看看W3school的教程xpath。
在capybara中为什么要这么用?戳这里capybara XPath, CSS and selectors .
The end
capybara 中,操作页面的方法除了visit,click外,还有很多比如fill_in, check,choose等等,很强大。
详见:capybara