0

我们正在使用 Cucumber 和 PageObject gem 测试一个 Web 应用程序,在 TeamCity 上运行 CI。我们遇到了一个我们都无法解决的问题。

我们正在访问两个下拉菜单,它们的组合内容会生成一个单选字段。当我从本地计算机运行它时,它通过了,但是当从集成服务器针对同一环境运行时,它大部分时间都失败了......

...除了晚上。我配置了一些预定的构建,这样我就可以在稳定的环境中观察它,并且它总是在一夜之间通过。

它抛出的错误是国家下拉列表(第二个字段,取决于“客户”,这是第一个)不包含选择的值。我已经手动检查过它,客户端框似乎是空的。

导致错误的自动化代码如下。请注意,我尝试了几种方法来访问它,包括下拉到 Watir Webdriver,但没有任何区别。

你认为这只是一个简单的性能问题吗?我不明白这是怎么回事,因为测试代理一次只运行一个项目,所以理论上它们应该执行相同的操作,而不管构建负载如何。

def safe_select_client(value, attempts = 10)

  count_attempts_to(attempts)do
    self.client_code = value
    if self.client_code_element.selected? value
      next
    else
      $stdout.puts attempts-1
      safe_select_client(value, attempts-1)
    end
  end
end

def safe_select_country(value, attempts = 10)
  count_attempts_to(attempts) do
    self.client_country = value
    if self.client_country_element.selected? value
      next
    else
      safe_select_country(value, attempts-1) unless self.client_country_element.selected? value
    end
  end
end


def safe_select_proposition(value, attempts = 10)
  count_attempts_to(attempts) do
    self.select_default_proposition
    safe_select_proposition(value, attempts-1) unless default_proposition_selected?
  end
end
4

2 回答 2

1

我有一个解决方案。

应用程序开发人员对此进行了调查,发现该错误与应用程序的健壮性有关,而不是测试代码:客户端正在缓存下拉列表的值。如果不是自动验收测试,它永远不会被发现——或者会在生产中发现,修复成本要高得多。

谢谢大家。

于 2013-06-18T07:59:43.060 回答
0

这似乎是一个性能问题,因为脚本试图在完成加载之前设置国家/地区下拉列表。

在不知道该count_attempts_to方法的作用的情况下,您的代码似乎尝试设置下拉值并多次重新尝试。但是,如果该值不存在,则重试可能不会运行,因为已经引发了异常。即使重试部分有效,重试也会立即出现,因此下拉菜单可能仍未加载。

您可能应该改用内置的等待方法 - 请参阅http://watirwebdriver.com/waiting/

假设这count_attempts_to只是您的重试机制的一部分,我认为您可以重写国家方法(和其他方法),例如:

def safe_select_country(value)
  self.client_country_element.option(:value => value).when_present.set
end

这表示等待选项最多 30 秒。找到后,选择它。

于 2013-06-11T12:06:12.800 回答