如何使用ruby selenium / capybara

时间:2018-03-09 22:09:20

标签: ruby selenium selenium-webdriver capybara

我需要编写一系列测试来验证我的网络应用中不同页面上的标签顺序。我面临的问题是,就我所知,水豚的send_keys方法要求你处于一个特定的元素上。让我用一个非常简单的例子来说明。

<div class="group">
  <input type="text" id="first">
  <input type="text" id="second">
  <input type="text" id="third">
</div>

在我的页面上(称之为www.mypage.com/home)我有三个输入字段,如上所示。我想要做的是转到页面并验证,因为我通过它从第一个到第二个到第三个...所以基本上我想做:

visit 'www.mypage.com/home'
send_keys(:tab)
expect(find('#first')).to have_focus
send_keys(:tab)
expect(find('#second')).to have_focus
send_keys(:tab)
expect(find('#third')).to have_focus

正如我上面提到的那样,问题是水豚要求我处于特定的元素上。因此,虽然我可以使用下面的代码测试它从第一个到第二个和第二个到第三个,但我不知道如何验证标签的第一个是first。此外,下面的代码还有一堆额外的查找。

page.find('#first').send_keys(:tab)
expect(find('#second')).to have_focus
page.find('#second').send_keys(:tab)
expect(find('#third')).to have_focus

1 个答案:

答案 0 :(得分:0)

您的初始Tab键按键必须在某处发送,因此选择一些内容,例如body元素,并将其发送给它。从那里你知道有焦点的元素以及你想要发送密钥的位置,所以只需找到它们并使用它们(而不是重复查找)

visit 'www.mypage.com/home'
first, second, third = find('#first'), find('#second'), find('#third')
find('body').send_keys(:tab) # or find('*:focus'), etc.
expect(first).to have_focus
first.send_keys(:tab)
expect(second).to have_focus
second.send_keys(:tab)
expect(third).to have_focus