【问题标题】:How can I waitFor an element to have children with Geb?我如何等待一个元素与 Geb 生孩子?
【发布时间】:2014-12-04 15:57:04
【问题描述】:

我正在执行一项测试,该测试运行“点击添加”功能的功能使用。 用户将获得一个项目表,允许他们单击“添加”按钮将项目添加到他们的购物车。

按钮执行 ajax 调用以将商品附加到用户的购物车。成功添加项目后,该项目将显示在购物车 UI 中。购物车 UI 本质上是另一个表格。

//pseudo code
$('.addButton').on('click', function (event) {
    $.ajax({
        url:...,
        success: updateCart
    });
});
function updateCart (data) {
    // use data to create tr_fragment
    $("#cart-ui-target").append(tr_fragment); //new row
}

我尝试在then 语句中使用waitFor,直到#cart-ui-target<tr> 大小大于或等于1:

waitFor(5) {$('#cart-ui-target').find('tr').size() >= 1}

但是,有时测试会失败,但会出现以下异常:

geb.waiting.WaitTimeoutException: condition did not pass in 5.0 seconds (failed with exception)

我什至尝试以 2 秒的间隔将 waitFor 时间增加到 10 秒,但它仍然不起作用:

waitFor(10, 2) {$('#cart-ui-target').find('tr').size() >= 1}

我能做些什么来更好地等待并防止零星的失败?

更新 这是我在 phantomjs 的日志信息中看到的。

$('#cart-ui-target').find('tr').size()
|                  |          |
|                  []         0
[[[[[PhantomJSDriver: phantomjs on LINUX (113358b0-7bf1-11e4-a10e-9f2b2537fa31)] -> tag name: html]] -> css selector: #cart-ui-target]]

【问题讨论】:

  • 由于WaitTimeoutException导致测试失败时,项目是否真的出现在指定的时间?
  • 据我所知。确认的差距是 CI 系统(测试失败的地方)不能很好地处理快照。我们仍在努力使其正常工作。
  • 我能够为 phantomjs 设置信息级别;更新的问题。
  • 你可以尝试直接执行一些 javascript 来选择元素,而不是使用 Geb 的 $() 函数:waitFor{browser.driver.executeScript("return document.querySelectorAll('#cart-ui-target tr')").size() > 0}
  • 有没有在测试执行前行数大于 1 的实例?如果这是问题,我会先得到 tr 的大小并对此进行测试。或者更好的是通过检查 $.active 来等待 ajax 调用完成。

标签: ajax spock geb


【解决方案1】:

我认为您尝试测试 JavaScript 行为,而不是添加到购物车本身(可能在后端逻辑中测试?)。

我认为要走的路是模拟 $.ajax 并使用夹具数据从模拟中调用回调。如果您使用茉莉花,这可能看起来像这样:

it('should add something when something is succesfully addes', function() {
  data = 'data_for_callback_here';
  spyOn($, 'ajax').andCallFake(function(data) { data.success(data); } );
  $('.addButton').click();
  expect() // Expect something
});

【讨论】:

  • 我正在测试 JavaScript 行为,但我正在使用真实数据进行测试。前面的测试执行填充项目表的搜索。然后我断言“已添加”项与 ajax 成功后添加到购物车中的项相同。
  • 我不了解您的环境,但我个人认为应该隔离测试。但是,在运行完整的集成测试时,情况可能会有所不同...
  • 用于单独添加和删除测试的集成测试。这些 Geb 测试测试用户对功能的期望。这些特定测试使用Stepwise 订单,因此具有登录、搜索、添加商品、删除商品、提交购物车和注销的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2021-04-28
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多