Selenium无法在下拉列表中加载动态选项

时间:2012-07-05 10:05:38

标签: selenium selenium-rc

我正在测试的网页上的下拉选项取决于为早期文本框和选择提供的值(例如,根据指定的货币和金额,产品的下拉列表将显示适当的值。没有值,提供下拉列表是空白的。)。

现在,虽然我提供了货币和金额的值,但产品下拉列表仍为空白。它不会根据提供的早期数据获取过滤后的值。我正在使用Selenium服务器(2.24.1)并使用TestNG在Eclipse中用Java编写脚本并在IE8上进行测试。

检查时,下拉列表与其他下拉列表没有区别,只有其选项会根据页面上其他元素的值而更改。 Web应用程序是用Java(Wicket framework)开发的。

Selenium代码:

selenium.select(ownerBranch, "label=4521 - Branch one");

selenium.select(currency, "label=SEK - Swedish kronor");
Thread.sleep(sleep);

selenium.type(amountSantioned,"100000");
Thread.sleep(sleep);

selenium.click(chooseLoanTermBymatDate);
Thread.sleep(sleep);

timeNow=Calendar.getInstance();
timeNow.add(Calendar.DATE,+360);selenium.type(maturityDate,dateformat.format(timeNow.getTime()));
Thread.sleep(sleep);

selenium.type(amountSantioned,"100000");
Thread.sleep(sleep);

selenium.select(serviceDelChannel, "label=BackOffice");
Thread.sleep(sleep);
selenium.select(product, "label=");
Thread.sleep(sleep*2);
selenium.select(product,"label=LN7292 - Consumer loan for Year2026");
Thread.sleep(sleep);

1 个答案:

答案 0 :(得分:0)

我不会尝试重现这个问题(如果你能指出一个有类似行为的公开可见的网站,我可能会测试它),所以我只是在这里猜测:

由于Selenium RC是用纯Javascript编写的,并且“仅”在从下拉列表中选择值时触发change事件,Wicket可能正在等待其他内容或依赖于完全不同的机制。

你可以尝试的事情:

  • 使用Selenium WebDriver。 Selenium RC已经被弃用了一年多,因为它有严重的技术限制(你可能刚刚碰到一个),现在由WebDriver解决了。此外,你不必再次使用Thread.sleep()(虽然我几乎可以肯定它甚至可以在这里摆脱,大多数情况下)。这个解决方案是最痛苦的,但几乎可以保证工作正常,因为WebDriver的行为就像一个真实的用户。
  • 在与您互动的所有input元素上调用selenium.fireEvent()Useful events可能是focusblur,甚至可能是click
  • 每次更改下拉列表后,调用selenium.keyPressNative(String.valueOf(KeyEvent.VK_ENTER))(本地按 Enter )。如果在此之前没有关注更改的下拉菜单,您可能需要事先focus()
  • 尝试尽可能接近地模拟用户行为而不是使用JS方法的痛苦方式:尝试focus()下拉元素,而不是使用select(),然后通过{选择其中一个选项重复{3}} 向下箭头,然后输入