Skip to content

QA: Deploy key cloning test sometimes can't find the QA element

The following tests failed during the GCP migration rehearsal today.

user adds a deploy key (FAILED - 1) also the screenshot is the same for the following 2 failures as well.
user sets up a deploy key with QA::Runtime::Key::ED25519() to clone code using pipelines (FAILED - 2)
user sets up a deploy key with QA::Runtime::Key::ECDSA(521) to clone code using pipelines (FAILED - 3)

Upon investigating all the failures are the same and the test is not able to find the element.

     Capybara::ElementNotFound:
       Unable to find visible css ".qa-project-deploy-keys" within #<Capybara::Node::Element tag="section" path="/html/body/div/div[2]/div[3]/div/section[2]">

Fix

The fix is to add a more fault tollerant wait.

  • Increase the max retry and or wait time between polling on finding the element.
  • If this is wrapped in a ui utility method we should provide such argument to adjust 1) max retries 2) sleep interval

cc @rymai @ddavison

Full error

Failures:
 1) deploy keys support user adds a deploy key
     Failure/Error:
       deploy_key = Factory::Resource::DeployKey.fabricate! do |resource|
         resource.title = deploy_key_title
         resource.key = deploy_key_value
       end
     
     Capybara::ElementNotFound:
       Unable to find visible css ".qa-project-deploy-keys" within #<Capybara::Node::Element tag="section" path="/html/body/div/div[2]/div[3]/div/section[2]">
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:314:in `block in synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:302:in `synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:37:in `find'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:810:in `block (2 levels) in <class:Session>'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:340:in `within'
     # ./qa/page/base.rb:80:in `within_element'
     # ./qa/page/project/settings/deploy_keys.rb:60:in `within_project_deploy_keys'
     # ./qa/page/project/settings/deploy_keys.rb:46:in `key_titles'
     # ./qa/factory/resource/deploy_key.rb:10:in `block (3 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:14:in `perform'
     # ./qa/page/project/settings/repository.rb:14:in `block in expand_deploy_keys'
     # ./qa/page/settings/common.rb:18:in `block (2 levels) in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:10:in `block in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:9:in `expand_section'
     # ./qa/page/project/settings/repository.rb:13:in `expand_deploy_keys'
     # ./qa/factory/resource/deploy_key.rb:9:in `block (2 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:5:in `instance_exec'
     # ./qa/scenario/actable.rb:5:in `act'
     # ./qa/scenario/actable.rb:18:in `act'
     # ./qa/factory/resource/deploy_key.rb:8:in `block in <class:DeployKey>'
     # ./qa/factory/product.rb:22:in `block (3 levels) in populate!'
     # ./qa/factory/product.rb:21:in `instance_exec'
     # ./qa/factory/product.rb:21:in `block (2 levels) in populate!'
     # ./qa/factory/product.rb:20:in `each_value'
     # ./qa/factory/product.rb:20:in `block in populate!'
     # ./qa/factory/product.rb:19:in `tap'
     # ./qa/factory/product.rb:19:in `populate!'
     # ./qa/factory/base.rb:25:in `block in fabricate!'
     # ./qa/factory/base.rb:16:in `tap'
     # ./qa/factory/base.rb:16:in `fabricate!'
     # ./qa/specs/features/project/add_deploy_key_spec.rb:11:in `block (2 levels) in <module:QA>'
     # ./qa/specs/runner.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/test/instance.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/bootable.rb:14:in `launch!'

  2) cloning code using a deploy key user sets up a deploy key with QA::Runtime::Key::ED25519() to clone code using pipelines
     Failure/Error:
       Factory::Resource::DeployKey.fabricate! do |resource|
         resource.project = @project
         resource.title = "deploy key #{key.name}(#{key.bits})"
         resource.key = key.public_key
       end
     
     Capybara::ElementNotFound:
       Unable to find visible css ".qa-project-deploy-keys" within #<Capybara::Node::Element tag="section" path="/html/body/div/div[2]/div[3]/div/section[2]">
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:314:in `block in synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:302:in `synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:37:in `find'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:810:in `block (2 levels) in <class:Session>'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:340:in `within'
     # ./qa/page/base.rb:80:in `within_element'
     # ./qa/page/project/settings/deploy_keys.rb:60:in `within_project_deploy_keys'
     # ./qa/page/project/settings/deploy_keys.rb:46:in `key_titles'
     # ./qa/factory/resource/deploy_key.rb:10:in `block (3 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:14:in `perform'
     # ./qa/page/project/settings/repository.rb:14:in `block in expand_deploy_keys'
     # ./qa/page/settings/common.rb:18:in `block (2 levels) in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:10:in `block in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:9:in `expand_section'
     # ./qa/page/project/settings/repository.rb:13:in `expand_deploy_keys'
     # ./qa/factory/resource/deploy_key.rb:9:in `block (2 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:5:in `instance_exec'
     # ./qa/scenario/actable.rb:5:in `act'
     # ./qa/scenario/actable.rb:18:in `act'
     # ./qa/factory/resource/deploy_key.rb:8:in `block in <class:DeployKey>'
     # ./qa/factory/product.rb:22:in `block (3 levels) in populate!'
     # ./qa/factory/product.rb:21:in `instance_exec'
     # ./qa/factory/product.rb:21:in `block (2 levels) in populate!'
     # ./qa/factory/product.rb:20:in `each_value'
     # ./qa/factory/product.rb:20:in `block in populate!'
     # ./qa/factory/product.rb:19:in `tap'
     # ./qa/factory/product.rb:19:in `populate!'
     # ./qa/factory/base.rb:25:in `block in fabricate!'
     # ./qa/factory/base.rb:16:in `tap'
     # ./qa/factory/base.rb:16:in `fabricate!'
     # ./qa/specs/features/project/deploy_key_clone_spec.rb:47:in `block (3 levels) in <module:QA>'
     # ./qa/specs/runner.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/test/instance.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/bootable.rb:14:in `launch!'

  3) cloning code using a deploy key user sets up a deploy key with QA::Runtime::Key::ECDSA(521) to clone code using pipelines
     Failure/Error:
       Factory::Resource::DeployKey.fabricate! do |resource|
         resource.project = @project
         resource.title = "deploy key #{key.name}(#{key.bits})"
         resource.key = key.public_key
       end
     
     Capybara::ElementNotFound:
       Unable to find visible css ".qa-project-deploy-keys" within #<Capybara::Node::Element tag="section" path="/html/body/div/div[2]/div[3]/div/section[2]">
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:314:in `block in synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:302:in `synced_resolve'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/node/finders.rb:37:in `find'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:810:in `block (2 levels) in <class:Session>'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:340:in `within'
     # ./qa/page/base.rb:80:in `within_element'
     # ./qa/page/project/settings/deploy_keys.rb:60:in `within_project_deploy_keys'
     # ./qa/page/project/settings/deploy_keys.rb:46:in `key_titles'
     # ./qa/factory/resource/deploy_key.rb:10:in `block (3 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:14:in `perform'
     # ./qa/page/project/settings/repository.rb:14:in `block in expand_deploy_keys'
     # ./qa/page/settings/common.rb:18:in `block (2 levels) in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:10:in `block in expand_section'
     # /usr/local/bundle/gems/capybara-2.16.1/lib/capybara/session.rb:343:in `within'
     # ./qa/page/settings/common.rb:9:in `expand_section'
     # ./qa/page/project/settings/repository.rb:13:in `expand_deploy_keys'
     # ./qa/factory/resource/deploy_key.rb:9:in `block (2 levels) in <class:DeployKey>'
     # ./qa/scenario/actable.rb:5:in `instance_exec'
     # ./qa/scenario/actable.rb:5:in `act'
     # ./qa/scenario/actable.rb:18:in `act'
     # ./qa/factory/resource/deploy_key.rb:8:in `block in <class:DeployKey>'
     # ./qa/factory/product.rb:22:in `block (3 levels) in populate!'
     # ./qa/factory/product.rb:21:in `instance_exec'
     # ./qa/factory/product.rb:21:in `block (2 levels) in populate!'
     # ./qa/factory/product.rb:20:in `each_value'
     # ./qa/factory/product.rb:20:in `block in populate!'
     # ./qa/factory/product.rb:19:in `tap'
     # ./qa/factory/product.rb:19:in `populate!'
     # ./qa/factory/base.rb:25:in `block in fabricate!'
     # ./qa/factory/base.rb:16:in `tap'
     # ./qa/factory/base.rb:16:in `fabricate!'
     # ./qa/specs/features/project/deploy_key_clone_spec.rb:47:in `block (3 levels) in <module:QA>'
     # ./qa/specs/runner.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/test/instance.rb:22:in `perform'
     # ./qa/scenario/template.rb:7:in `block in perform'
     # ./qa/scenario/template.rb:5:in `tap'
     # ./qa/scenario/template.rb:5:in `perform'
     # ./qa/scenario/bootable.rb:14:in `launch!'

Screenshots

screenshot_2018-06-21-14-00-53.991

screenshot_2018-06-21-14-04-27.499

screenshot_2018-06-21-14-04-48.907

Edited by Lin Jen-Shin