标签: capybara

具有子域的Capybara - default_host

我有一个使用子域来切换数据库的应用程序(多租户).我正在尝试使用Capybara进行集成测试,它确实依赖于子域.

我的理解是,设置Capybara.default_host=某些内容会使我的所有请求都来自此主机.似乎并非如此.在这篇文章中,作者建议只使用主机访问显式网址,但如果我在整个地方导航,这会变得有点烦人.我想设置主机,然后能够按预期使用我的rails路径.不知道我做错了什么,但这是我尝试过的:

# spec_helper.rb
RSpec.configure do |config|
  config.before(:each, :type => :request) do
    Capybara.default_host = 'http://app.mydomain.com'
  end
end

# in some_integration_spec.rb
before do
  puts "Capybara.default_host: #{Capybara.default_host}"
  puts "some_app_url: #{some_app_url}"
end
Run Code Online (Sandbox Code Playgroud)

这产生了输出:

Capybara.default_host: http://app.mydomain.com
some_app_url: http://www.example.com/some_path
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么? default_host似乎什么都不做.正如我所说,我不想说visit(Capybara.default_host + some_app_path),因为每次都有点烦人.为什么还存在default_host选项?

integration-testing ruby-on-rails capybara

47
推荐指数
3
解决办法
2万
查看次数

如何使用Capybara模拟鼠标悬停

基本上,我要做的是点击一个按钮,当悬停在另一个元素(其父元素)时变为可见.

我试图trigger.('mouseover')在隐藏按钮的父级上使用,但这似乎不起作用.

这是规范中的代码片段:

 # label[for ... ] -> the parent element
 page.execute_script("$('label[for=\"department_#{department.id}\"]').trigger(\"mouseover\")")     
 # le hidden button
 find(".actions").click     
 # some <li> on a list that drops down when clicking the hidden button    
 click_on("Edit department")
Run Code Online (Sandbox Code Playgroud)

错误......

 Failure/Error: click_on("Edit department")
 Selenium::WebDriver::Error::ElementNotVisibleError:
 Element is not currently visible and so may not be interacted with
Run Code Online (Sandbox Code Playgroud)

我想知道如何.actions在页面上显示按钮,以便之后点击它.

任何帮助将非常感激.

rspec ruby-on-rails capybara

47
推荐指数
4
解决办法
3万
查看次数

Cucumber和Capybara,单击非链接或按钮元素

我正在尝试使用Cucumber/Capybara/Selenium堆栈测试一个就地编辑器,但我的问题是通过单击div而不是链接或按钮来激活编辑器.我似乎无法弄清楚如何让Capybara这样做.有办法做到这一点吗?

selenium integration-testing webdriver cucumber capybara

46
推荐指数
1
解决办法
2万
查看次数

为什么不为Rspec + Selenium使用共享的ActiveRecord连接?

似乎最常被接受的处理Selenium和测试的方法是避免使用事务夹具,然后在测试/场景之间使用像database_cleaner这样的东西.我最近遇到了以下文章,建议执行以下操作:

spec_helper.rb

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)

对于性能而言,这似乎比替代品更好.有没有人有理由不这样做?

ruby rspec ruby-on-rails capybara

46
推荐指数
2
解决办法
8457
查看次数

黄瓜与水豚

有人可以解释这两个平台之间的区别吗?是BDD的一部分,但为什么我应该使用一个或另一个,或两者兼而有之?谢谢你的回答

testing bdd rubygems cucumber capybara

46
推荐指数
3
解决办法
2万
查看次数

回调重定向不保留会话

我有一个方案,当我使用真正的omniauth时工作得很好,但是当我用黄瓜/水豚的模拟auth运行它时失败了.

在回调中,当我这样做时sign_in @user,它成功创建用户并登录... current_user已设置.但是当我这样做时redirect_to request.env['omniauth.origin'] || '/',在接下来的行动中,current_user现在是零.

我已通过屏幕截图确认/暂停浏览器它不能使用模拟身份验证.firefox和chrome驱动程序中出现相同的错误.

知道为什么会发生这种情况吗?

/features/support/env.rb:

Cucumber::Rails::Database.javascript_strategy = :truncation
Run Code Online (Sandbox Code Playgroud)

场景:

@javascript
Scenario:
    Given I am on the home page
    When I press "Login"
    And I should see "Login with Twitter" in the selector "#login-modal"
    Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo"    
    When I login with Twitter
    Then I should be logged in as "foo"
Run Code Online (Sandbox Code Playgroud)

步骤定义:

Given(/^Omniauth returns a user with provider "(.*?)" …
Run Code Online (Sandbox Code Playgroud)

cucumber capybara omniauth omniauth-twitter

46
推荐指数
1
解决办法
570
查看次数

表格提交后,Capybara不会传递标题

我正在构建一个Rails 3应用程序,它为移动设备(使用jQuery Mobile)和常规桌面浏览器呈现不同的视图.我正在使用Cucumber/Capybara进行测试,并为移动设备和浏览器提供单独的测试套件.我可以使用此处的'headers hack'在请求的HTTP头中设置移动用户代理字符串...

在Rails 3中使用Cucumber/Capybara,如何设置自定义User-Agent字符串?

问题...

我的大多数移动Cucumber步骤都运行良好(例如,我将移动标头设置为一步,然后移动视图呈现).然而,在表单提交之后,测试然后呈现下一步的浏览器视图(而不是我想要的移动视图).我想这可能是因为Capybara在表单提交动作后丢弃了标题.

我尝试通过向控制器操作添加记录器来测试这一点,以便我可以查看user_agent标头,如下所示:

def show
    # …
    logger.info("Headers: #{request.user_agent}")
    # …
end
Run Code Online (Sandbox Code Playgroud)

我使用了iPhone标头(买方是资源).在我的test.log中,我看到:

对于创建动作......

Started POST "/buyers" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#create as HTML
  #...
Headers: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
  #...
Redirected to http://www.example.com/buyers/1
Completed 302 Found in 7ms
Run Code Online (Sandbox Code Playgroud)

对于后续的show动作(注意'标题:'为空白)......

Started GET "/buyers/1" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#show as HTML
 #... …
Run Code Online (Sandbox Code Playgroud)

header cucumber capybara jquery-mobile ruby-on-rails-3

45
推荐指数
1
解决办法
2643
查看次数

如何才能看到黄瓜失败的黄瓜步骤中发现了什么?

我开始从黄瓜+ webrat迁移到黄瓜+水豚.现在"我应该看"的行为似乎有些不同.其中大部分都失败了,虽然我没有改变页面上的任何内容.我替换了应该找到的片段,其中包含每个页面上的一些内容,对于某些文本它可以使用,而对于其他文本则不然.我找不到页面内容中的任何模式,也没有找到任何模式.Webrat用于打印它找到的页面内容,以防它不包含所需的短语.反正有没有capybara显示它从试图找到文本的页面中得到了什么文本?

ruby-on-rails webrat cucumber capybara

44
推荐指数
6
解决办法
2万
查看次数

Cucumber/Capybara - 如何获取当前执行的主机和端口

我需要使用Open :: URI从我的应用程序下载一个csv文件,为此我需要给它一个完全限定的URI.那么最好的方法是获取主机,更重要的是我的黄瓜脚本中的PORT?

注意我正在使用Capybara和Selenium

selenium ruby-on-rails cucumber capybara

44
推荐指数
2
解决办法
2万
查看次数

是否可以与水豚的隐藏元素进行交互?

我有一个文件字段,它有opacity: 0一个假的按钮.它是一种常见的css技术,用于伪造一种在不同浏览器中一致显示的"上传按钮".

Capybara不允许我打电话attach_file给那个输入.错误是Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with.

有谁知道强迫水豚与隐形元素互动的方法吗?

答案仍然没有答案,但我找到了解决方法.没有什么是智能的,只需用简单的脚本使元素可见即可

  page.execute_script %Q{
    $('#photos').css({opacity: 1, transform: 'none'});
  }
Run Code Online (Sandbox Code Playgroud)

我发布它作为记录.

attachment capybara

42
推荐指数
3
解决办法
3万
查看次数