我们正在使用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
答案 0 :(得分:1)
我有一个解决方案。
应用程序开发人员对此进行了调查,发现该错误与应用程序健壮性有关,而不是测试代码:客户端正在缓存下拉列表的值。这是一个永远不会被发现的错误 - 或者如果不是自动验收测试,那么它将在生产中被发现,而且修复成本更高 -
谢谢大家。
答案 1 :(得分:0)
这似乎是一个性能问题,因为脚本在完成加载之前尝试设置国家/地区下拉列表。
在不知道count_attempts_to
方法的作用的情况下,您的代码似乎尝试设置下拉值并重新尝试多次。但是,如果该值不存在,则重试可能不会运行,因为已经抛出了异常。即使重试部分工作,重试也会立即显示,因此下拉列表可能仍未加载。
您应该使用内置等待方法 - 请参阅http://watirwebdriver.com/waiting/。
假设count_attempts_to
只是重试机制的一部分,我认为你可以重写country方法(和其他方法),如:
def safe_select_country(value)
self.client_country_element.option(:value => value).when_present.set
end
这表示等待选项最多30秒。找到后,选择它。