我有两个下拉列表,一个包含国家/地区列表,另一个包含未选中其中一个国家/地区之前未填充的州/地区。这两个下拉列表都包含在更新面板中。当我选择美国时,状态下拉列表中有50个州,我可以从那里继续前进。
我们正在使用Selenium对此代码运行测试,并且测试在到达状态下拉列表时总是会中断。生成状态列表需要花费太长时间,或者它可能无法找到值,因为它们不在渲染的初始html中。我已经看到了一些关于javascript“WaitForCondition”字段的内容,但是在selenium文档中找不到有关如何使用它的任何细节。我不是一个javascript slouch,但也不是最好的。任何人都可以向我解释你如何解决我的困境,如果碰巧需要知道WaitForCondition字段的方法,你能告诉我如何让它工作吗?
为了记录,我看过这篇文章:(click here for semi-useful stackoverflow post)但我不明白如何将它与我自己的情况联系起来。提前感谢你能给我的任何东西。
答案 0 :(得分:4)
您使用的是Selenium IDE吗?这样可以非常轻松地编写代码,然后将其导出为Selenium RC使用的语言。
在Selenium IDE中,您将找到一个名为“waitForText”的方法。此方法将元素定位器作为参数,将字符串作为值。您的定位器将是状态下拉列表的ID(如果它具有动态ID,则为css选择器)。对于该值,仅在加载后使用下拉列表中存在的内容(列表中的最后一个美国状态可能是最佳选择)。
如果您需要任何澄清或其他详细信息,请与我们联系。
此致 标记
答案 1 :(得分:2)
事实证明我找到了解决自己问题的方法。
我在C#测试中使用了以下行,它立即在我的下拉列表中找到了值:
selenium.WaitForCondition("var ddl = selenium.browserbot.getCurrentWindow().document.getElementById('insert-id-of-dropdownlist-here'); ddl.options[ddl.selectedIndex].text == 'insert-text-value-to-search-for-in-dropdown-here';", "10000");
在IDE中,我使用了以下参数:
命令:waitForCondition
目标:var ddl = selenium.browserbot.getCurrentWindow()。document.getElementById('insert-id-of-dropdownlist-here'); ddl.options [ddl.selectedIndex] .text =='insert-the-text-value-to-search-for-in-dropdown-here';
值:10000
这是最终帮助我找出解决方案的页面: http://wiki.openqa.org/display/SEL/waitForCondition
答案 2 :(得分:1)
抱歉,如果没有我面前的实际页面,很难测试我的代码。问题可能是每个状态都是option
元素下的select
元素(或者您可能正在使用以不同方式处理此问题的javascript框架?)。如果您有option
个元素,则可以使用:
waitForElementPresent | css=option:contains('someState')
导出为:
for (int second = 0;; second++) {
if (second >= 60) Assert.Fail("timeout");
try
{
if (selenium.IsElementPresent("css=option:contains('someState')")) break;
}
catch (Exception)
{}
Thread.Sleep(1000);
}