2017-09-26 46 views
0

Click for image)我正在编写一个项目来编写测试登录功能的场景。由于某种原因,水豚不访问动态元素: 重现步骤: 1)访问Redfin.com(例如) 2)单击登录按钮 3)出现动态弹出对话框 4)单击“继续电子邮件“,然后尝试输入详细信息并点击提交。如何使用黄瓜和水豚处理动态元素

我找不到任何带有find(#)的元素,并且无法点击提交或输入详细信息。

另外我相信webapp是用React构建的。 请让我知道如何处理这个。

<div class="emailSignInButtonWrapper" style="position: relative;"> 
<button class="button Button tertiary emailSignInButton v3" type="button" tabindex="0" data-rf-test-name="submitButton"> 
<span> 
<span class="signInText">Continue with Email</span> 
</span> 
</button> 
+1

我不知道如何代码的样子,一个例子会很好。然而,正如你所提到的,应用程序是用React编写的,我的第一个猜测是使用'js:true'切换到'Capybara.javascript_driver'。你可能会觉得这很有用。 https://github.com/teamcapybara/capybara#drivers – hyphenbash

+0

@hyphenbash对于html代码,您可以访问(redfin.com网站), – user8673269

+0

[切换到黄瓜,水豚的弹出窗口](https:// stackoverflow.com/questions/18983684/switch-to-popup-windows-in-cucumber-capybara) –

回答

0

你正在谈论的元素都没有ID,这样一个CSS发现使用#<id>find('#my_button').click)是行不通的。但是点击该按钮,你就应该能够做到

click_button('Continue with Email') # case of the text matters 

click_button(class: 'emailSignInButton') 

这一切都假定您使用的驱动程序与支持JS水豚 - https://github.com/teamcapybara/capybara#drivers

这里的代码演示它可以工作,如果使用支持JS的驱动程序

require 'capybara/dsl' 
require 'selenium-webdriver' 

session = Capybara::Session.new(:selenium_chrome) 
session.visit "https://www.redfin.com" 

session.click_link('Sign In', href: nil) 

session.click_button('Continue with Email') 
+0

我试图使用这些没有运气,得到一个错误_无法找到可见按钮零类[emailSignInButton](水豚:: ElementNotFound)_ – user8673269

+0

@ user8673269然后您要么实际上没有使用硒进行这些测试,要么您的Capybara.default_max_wait_time对于您正在测试的硬件来说太低。尝试截取屏幕截图,查看实际页面状态为 –

+0

@ user8673269添加了代码,显示它的工作原理 - 很可能您实际上并没有使用硒标签 –

0

这里' s什么工作在我的红场网站:

scenario "bring up signup form on redfin" do 
    visit 'https://www.redfin.com' 
    find('a', :text => 'Sign In').click 
    click_button('Continue with Email') 
end