GVKun编程网logo

当使用capybara / rails运行selenium时,如何配置服务器?

22

想了解当使用capybara/rails运行selenium时,如何配置服务器?的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Capybara+Selemium:如何在集成测试代码中

想了解当使用capybara / rails运行selenium时,如何配置服务器?的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?、Capybara的Selenium驱动程序将不会单击Jquery Mobile按钮、Cucumber/Capybara vsselenium?、ruby-on-rails – Capybara Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?的新知识。

本文目录一览:

当使用capybara / rails运行selenium时,如何配置服务器?

当使用capybara / rails运行selenium时,如何配置服务器?

通常,我在端口3000上使用Rails开发服务器。

水豚/黄瓜使用Capybara.server_port = 31337。如果我从默认驱动程序交换到selenium,则看起来它尝试在端口80上进行连接。

我想了解:

  • 使用selenium时,是否需要在测试环境中单独实例化测试服务器。
  • 如果上述问题的答案是肯定的,那么我该如何做才能在Web驱动程序之间无缝切换而不必不断进行更改?

如果有人举了一个env.rb配置示例,可以帮助您,请告诉我!

谢谢!

答案1

小编典典

如果使用硒,则应在测试环境中启动Web服务器。您可以在与开发不同的端口上启动它。然后,您应该将Capybara配置为使用该端口:

  Capybara.run_server = true #Whether start server when testing  Capybara.server_port = 8200  Capybara.default_selector = :css #:xpath #default selector , you can change to :css  Capybara.default_wait_time = 5 #When we testing AJAX, we can set a default wait time  Capybara.ignore_hidden_elements = false #Ignore hidden elements when testing, make helpful when you hide or show elements using javascript  Capybara.javascript_driver = :selenium #default driver when you using @javascript tag  # Other option is:  # Capybara.javascript_driver = :webkit

如果您不想每次在运行黄瓜方案之前都启动服务器,建议您使用capybara
webkit驱动程序。所有JavaScript方案都将在后台运行。它还将在连续集成服务器上工作。

如果您在Linux平台上,则capybara-
webkit需要X服务器才能运行。要设置它,您可以使用无头宝石。这是黄瓜的无头配置:

# place code below in features/support/headless.rbif Capybara.current_driver == :webkit  require ''headless''  headless = Headless.new  headless.start  at_exit do    headless.destroy  endend

Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

配置: 使用RSpec,Capybara,Selemium驱动程序,SQLite数据库对Rails项目进行集成测试。

情况: 我没有对Capybara和默认的rack_test驱动程序进行集成测试。他们直接在数据库中创建用户注册(用于Devise
gem)。然后他们像用户一样使用Capybara DSL登录并测试场景。

问题: 我也尝试将驱动程序更改为Selenium来测试JavaScript代码。现在测试失败,因为应用程序看不到测试创建的用户注册。

研究: Selenium驱动程序在转换中的工作方式似乎有所不同,因此测试中所做的更改在Web应用程序中是不可见的。可能的解决方案包括:

config.use_transactional_fixtures = false 
DatabaseCleaner.strategy = :truncation

Capybara的Selenium驱动程序将不会单击Jquery Mobile按钮

Capybara的Selenium驱动程序将不会单击Jquery Mobile按钮

如何解决Capybara的Selenium驱动程序将不会单击Jquery Mobile按钮?

|| Capybara \的Selenium驱动程序不会单击JQuery Mobile格式的按钮。它认为该按钮不可见。 有人看到这个问题并解决了吗? 我创建了一个“ greenfield”应用程序,在此演示了此问题: https://github.com/jevy/JQuery_Mobile_Capybara
@javascript
Scenario: Clicking a button doesn\''t complain # features/click_jq_mobile_button.feature:7
  Given I am on the home page                # features/step_deFinitions/web_steps.rb:44
  Given I press \"Some Button\"                # features/step_deFinitions/web_steps.rb:52
    Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotdisplayedError)
    [Remote Server] resource://fxdriver/modules/atoms.js:9442:in `unkNown\''
    [Remote Server] file:///var/folders/fG/fGiEX6gLHQyvWGWb-5MpfU+++TI/-Tmp-/webdriver-profile20110525-21904-h3s00b/extensions/fxdriver@googlecode.com/components/nsCommandProcessor.js:256:in `unkNown\''
    [Remote Server] file:///var/folders/fG/fGiEX6gLHQyvWGWb-5MpfU+++TI/-Tmp-/webdriver-profile20110525-21904-h3s00b/extensions/fxdriver@googlecode.com/components/nsCommandProcessor.js:305:in `unkNown\''
    [Remote Server] file:///var/folders/fG/fGiEX6gLHQyvWGWb-5MpfU+++TI/-Tmp-/webdriver-profile20110525-21904-h3s00b/extensions/fxdriver@googlecode.com/components/nsCommandProcessor.js:320:in `unkNown\''
    [Remote Server] file:///var/folders/fG/fGiEX6gLHQyvWGWb-5MpfU+++TI/-Tmp-/webdriver-profile20110525-21904-h3s00b/extensions/fxdriver@googlecode.com/components/nsCommandProcessor.js:197:in `unkNown\''
    (eval):2:in `send\''
    (eval):2:in `click_button\''
    ./features/step_deFinitions/web_steps.rb:53:in `/^(?:|I )press \"([^\"]*)\"$/\''
    features/click_jq_mobile_button.feature:9:in `Given I press \"Some Button\"\''

Failing Scenarios:
cucumber features/click_jq_mobile_button.feature:7 # Scenario: Clicking a button doesn\''t complain
    

解决方法

如何尝试:
driver.ExecuteScript(\"$(\''#buttonName\'').click()\");
这将与Selenium 2和jQuery mobile一起使用。     ,Capybara的DOM轮询可能是在页面加载且处于非活动状态时找到您的选择器(在jQueryMobile页面过渡效果完成之前)。我通过如下选择范围来解决此问题:
before do
  click_link \"get_ajax_page\"
  should have_selector(\".ui-page-active #my_id\")
  click_link \"link_on_ajax_page\"
end
have_selector
将阻止脚本,直到该页面处于活动状态。     ,这听起来很熟悉,但我认为我们可以通过将Selenium移到capybara-webkit来解决: http://robots.thoughtbot.com/post/4583605733/capybara-webkit     

Cucumber/Capybara vsselenium?

Cucumber/Capybara vsselenium?

前几天,我向我的公司的一名测试人员展示了我用黄瓜编写的一些测试(2个功能,5个场景)。然后他问我一个问题,我无法回答:

这比selenium或任何其他功能测试记录工具好吗?

我知道黄瓜是一种不同的技术,并且它处于不同的测试级别,但是我不明白为什么我应该费心编写和维护Cucumber / Capybara测试。

有人可以给我关于使用黄瓜/水豚而不是仅selenium的合理解释吗?

答案1

小编典典

这个问题是边缘性征求意见。您的问题实际上是对我说的:“什么工具适合我?”
我之所以这样说,是因为您没有给出选择黄瓜和水豚的原因。我相信要回答测试者的问题,您首先需要再回答几个问题:

1.)您将在过程的哪个阶段编写这些测试?

黄瓜可能不是单元测试的正确选择,具体取决于您使用的语言。但是它可以用于从单元到集成再到最终用户的任何级别的测试。

2.)谁来维护您的测试?您?其他开发商?测试人员?业务分析师?项目经理?

必须维护自动测试,并且知道谁将执行此操作可以帮助您选择工具-因为某些工具对于某些用户来说太技术性了。

3.)谁来定义新测试?

黄瓜应在开发,质量保证和企业所有者之间协作使用。它是利用所有人的知识进行自动化测试过程的理想工具。然而,这需要开发一种普遍存在的语言。您可以在James
Shore的“敏捷艺术”页面上阅读有关内容。

回答完这些问题后,就可以准备解决测试人员的问题了。

但是,在比较记录工具(例如Selenium IDE,HP Quick Test Pro,IBM Rational Functional
Tester)与开发工具(nUnit,jUnit,RSpec,Selenium
webdriver,Capybara)时,有几点需要牢记:他们针对不同的受众。他们也有不同的优缺点。

录制工具易于任何人使用,但它们创建的脚本很脆弱。它们容易断裂,需要更多维护。它们非常适合一次性自动测试,您需要快速完成它并拥有非技术人员。

开发工具的学习曲线较大,需要编程(或至少是脚本编写)经验。这些脚本通常更健壮,但是需要更多的技术知识来维护。当您需要可重复性并计划长时间使用测试时,它们是一个很好的解决方案。

我强烈建议您阅读《黄瓜书》。它确实可以帮助您确定黄瓜是否是您的正确选择。

ruby-on-rails – Capybara Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

ruby-on-rails – Capybara Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

组态:
使用RSpec,Capybara,Selemium驱动程序,sqlite数据库对Rails项目进行集成测试.

情况:
我没有使用Capybara和默认rack_test驱动程序进行集成测试.他们直接在数据库中创建用户注册(Devise gem).然后他们使用Capybara DSL登录并测试一个场景,就像一个用户一样.

问题:
我试图将驱动程序更改为Selenium以测试JavaScript代码.现在测试失败,因为应用程序没有看到测试创建的用户注册.

调查:
看起来Selenium驱动程序的工作方式与转换不同,所以测试中所做的更改在Web应用程序中是不可见的.可能的解决方案涉及:

config.use_transactional_fixtures = false 
DatabaseCleaner.strategy = :truncation

解决方法

对于我从 here和 here的工作解决方案:

>添加到Gemfile gem database_cleaner
>使用内容创建文件spec / support / javascript.rb

`

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before(:each) do
    if example.Metadata[:js]
      Capybara.current_driver = :selenium
      DatabaseCleaner.strategy = :truncation
    else
      DatabaseCleaner.strategy = :transaction
      DatabaseCleaner.start
    end
  end

  config.after(:each) do
    Capybara.use_default_driver if example.Metadata[:js]
    DatabaseCleaner.clean
  end
end

`

虽然它引起小笔刺激我的轮廓和型号规格执行时间(从40秒到43秒).

今天关于当使用capybara / rails运行selenium时,如何配置服务器?的分享就到这里,希望大家有所收获,若想了解更多关于Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?、Capybara的Selenium驱动程序将不会单击Jquery Mobile按钮、Cucumber/Capybara vsselenium?、ruby-on-rails – Capybara Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?等相关知识,可以在本站进行查询。

本文标签: