gpt4 book ai didi

testing - 使用 Capybara webkit 时找不到元素错误,但测试在非 headless 模式下运行良好

转载 作者:行者123 更新时间:2023-11-28 20:32:23 25 4
gpt4 key购买 nike

我正在尝试使用 Capybara-webkit 在 headless 模式下运行一个简单的谷歌搜索测试。

我已经在 env.rb 文件中设置了驱动程序:

Capybara.default_driver = :webkit
Capybara.current_driver = :webkit
Capybara.javascript_driver = :webkit

特征文件有一个简单的场景大纲,用于搜索输入并验证结果是否包含预期的输出:

    Given User opens the google page
When she searches for "<input>"
Then verify that the result has "<output>"

Examples:
|input | output |
|Agile Samurai author name|Jonathan Rasmusson|
|Eloquent Ruby author name|Russ Olsen |

在步骤定义中,访问 google 页面并在文本框中输入内容并单击搜索按钮。

Given /^User opens the google page$/ do
visit "http://google.com"
end

When /^she searches for "(.*?)"$/ do |search_query|
fill_in "gbqfq", :with => search_query
click_button "gbqfba"
end

Then /^verify that the result has "(.*?)"$/ do |output|
should have_content output
end

当我运行这些测试时,出现错误:

Unable to find field "gbqfq" (Capybara::ElementNotFound)

但是,如果我将驱动程序更改为 selenium:

Capybara.default_driver = :selenium
Capybara.current_driver = :selenium
Capybara.javascript_driver = :selenium

然后,测试运行并通过所有步骤。

在 headless 模式下,元素是否以其他方式找到?我的方法错了吗?我无法理解为什么在浏览器模式(打开 firefox 实例)下正常工作时在 headless 模式下找不到该元素。

我是这个领域的新手,所以任何帮助都将不胜感激。提前谢谢你。

最佳答案

我使用 puts page.html 打印了源代码。我发现 headless 模式的源代码不同。

这是浏览器模式下的部分文本框源码:

<input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q">

这是headless模式下的部分文本框源码:

<input class="lst" spellcheck="false" dir="ltr" title="Google Search" value="">

由于headless模式源码中不存在id,所以测试失败。如果有一些名称在两种模式中都是通用的,请将其用于测试。

我不确定为什么会这样。但谷歌可能会根据有头或 headless 模式加载不同的页面。

我尝试了几个其他网站,例如 flipkart.com,它们都支持这两种模式。即 id 等在两种模式下都是相同的。

所以,问题中的代码没有任何问题。只需要使用在两种模式下都存在的 id。

关于testing - 使用 Capybara webkit 时找不到元素错误,但测试在非 headless 模式下运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com