【问题标题】:Selenium not able to load dynamic options in a dropdownSelenium 无法在下拉列表中加载动态选项
【发布时间】:2012-07-05 10:05:37
【问题描述】:

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

现在,虽然我提供了货币和金额的值,但产品下拉列表仍然是空白的。它不是根据提供的早期数据获取过滤后的值。我正在使用 Selenium 服务器 (2.24.1) 并在 Eclipse 中使用 TestNG 编写 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);

【问题讨论】:

  • 页面在内部是如何工作的?什么技术创造了价值?任何检查工具对元素的 HTML 有什么看法?是空白吗,里面有元素吗?您能否向我们展示您的相关 Java 代码以及元素的 HTML 代码?还!你试过其他浏览器吗?
  • 好的,我会尝试您的改进并恢复您的状态谢谢
  • 我尝试使用 IE8。但它仍然无法正常工作。检查时下拉列表与其他下拉列表没有什么不同,只是它的选项会根据页面上其他元素的值而变化。我的应用程序是用 Java(Wicket 框架)开发的。我在这里粘贴我的测试脚本的java代码:它分为两部分粘贴。请查看它
  • selenium.select(ownerBranch, "label=4521 - Branch one"); selenium.select(currency, "label=SEK - 瑞典克朗"); Thread.sleep(睡眠);继续下一个 cmt selenium.type(amountSantioned,"100000"); Thread.sleep(睡眠); selenium.click(选择LoanTermBymatDate); Thread.sleep(睡眠); timeNow=日历.getInstance(); timeNow.add(Calendar.DATE,+360); selenium.type(maturityDate,dateformat.format(timeNow.getTime())); Thread.sleep(睡眠); selenium.type(amountSantioned,"100000"); Thread.sleep(睡眠); selenium.select(serviceDelChannel, "label=BackOffice"); Thread.sleep(睡眠);
  • selenium.select(product, "label="); Thread.sleep(sleep*2); selenium.select(product,"label=LN7292 - Year2026 消费贷款"); Thread.sleep(睡眠);

标签: selenium selenium-rc


【解决方案1】:

我不会尝试重现该问题(如果您可以将我指向具有类似行为的公开可见网站,我可能会对其进行测试),所以我只是在这里猜测一下:

由于 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方法的痛苦方法:而不是使用select(),尝试focus()一个下拉元素,然后通过pressing选择其中一个选项向下箭头重复,然后Enter

【讨论】:

  • 非常感谢您的及时帮助。
  • 我使用 selenium 服务器已经 6 个月了,迁移到 webdriver 并不麻烦。实际上我不知道 webdriver 是如何工作的,我在 eclipse 中使用 testNG。
  • 要了解差异并获取基本示例,请参阅 stackoverflow.com/questions/4007819/…stackoverflow.com/questions/10285641/…。此外,在您尝试解决问题后,请务必告诉我它是如何工作的:)。
  • 非常感谢,它起作用了。首先我在页面上使用的所有输入元素上使用带有事件“模糊”的 fireevent,然后我在页面上的所有输入元素上使用事件焦点。我不'不知道我是否可以减少调用事件的数量或需要使用 fireevent 的元素数量。但我继续对所有元素进行默认设置。无论如何,摆脱它对我和我的前辈来说是一种极大的解脱。非常感谢我的团队。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2016-08-25
相关资源
最近更新 更多