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
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
Edited by Lin Jen-Shin