gpt4 book ai didi

ruby-on-rails-3 - cucumber + Selenium 的 waitForElement

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

大家好,我正在尝试修复我的许多场景,这些场景使用高级 AJAX 测试页面和通过 JQuery 构建客户端屏幕,但遇到了很多问题。

主要是,我很难知道某些 AJAX 请求何时完成。我试过只延迟 sleep ,但从长远来看这不是个好主意。我也尝试了一些我在网上找到的方法来检查 AJAX 调用是否全部完成,但是这些方法似乎不够稳定。

我开始更多地探索 Selenium 并找到了 waitForXXX 函数。我兴奋地把它们扔进了我的 cucumber 台阶,但没有运气。我当前的测试用例是一个动态加载的网格,它通过 AJAX 获取数据。 (Jquery Datagrid 插件)。我通过查找第一个非标题行来查找数据,然后单击它。点击元素的代码是:

page.all(:css, "#{arg1} tr")[1].click();

有时这行得通,但通常行不通,因为该行尚未加载。所以我在尝试:

waitForElementPresent("css=#{arg1} tr:nth-child(1)")

在单击该行之前,但每当它到达该行代码时,我都会从 ruby​​ 中得到一个奇妙的错误:

stack level too deep (SystemStackError)

我做错了什么,有没有更好的方法来编写这些步骤以确保它们真的等待 AJAX 调用完成?

请注意,该应用程序本身运行良好 - 这只是为了让我的测试代码可靠地变为绿色。

最佳答案

我非常幸运地完成了下面的步骤(我们从别人那里得到的)。这是originally geared对 culerity/celerity(我们用了一段时间),但它对普通 cucumber / capybara 来说非常好:

When /^I wait for the AJAX call to finish$/ do
keep_looping = true
while keep_looping do
sleep 0.10
begin
count = page.evaluate_script('window.running_ajax_calls')
keep_looping = false if count.respond_to?(:to_i) && count.to_i == 0
rescue => e
raise e
end
end
sleep 0.20
end

您可能需要调整循环 sleep 和 sleep 后。这些值非常适用于同时运行 12 个核心测试的 Mac Pro。在极少数情况下,我们会额外增加 1 秒的等待时间。

关于ruby-on-rails-3 - cucumber + Selenium 的 waitForElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6047124/

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