【问题标题】:Facing an issue while selecting drop down in Selenium webdriver在 Selenium webdriver 中选择下拉菜单时遇到问题
【发布时间】:2016-10-09 17:32:50
【问题描述】:

我正在尝试使用 selenium web 驱动程序选择一个下拉列表,使用以下代码:

WebElement admissionSource = driver.findElement(By.name("ABC"));
Select admissionSource_select= new Select(admissionSource);
Thread.sleep(10000);

这里,ABC 是该元素的值名称属性。

它正在按预期进行选择,但是一旦移动到其下方的下一个下拉菜单,它就会取消选择前一个。

我尝试过的事情:

1) 填充下一个下拉菜单后,返回并再次填充上一个下拉菜单。然而,第二次尝试选择第一个下拉菜单但取消选择下一个下拉菜单(应用程序也是如此)。再次填充下一个下拉列表会引发以下异常:

org.openqa.selenium.StaleElementReferenceException: Element is no longer valid

2)Thread.sleep()

3) 隐式等待

4) 显式等待

请就如何解决此问题提出建议。

【问题讨论】:

    标签: java internet-explorer selenium selenium-webdriver drop-down-menu


    【解决方案1】:

    当您引用的元素不再可用或元素/页面被刷新时,会发生 StaleElementException。在您的情况下,从第一个下拉列表中选择会刷新/重新加载您的第二个下拉列表。因此,会发生 StaleElementException。为了克服这个问题,从第一个下拉列表中选择后,获取第二个下拉列表的位置并每次重新选择您的元素。

    【讨论】:

    • 我每次都尝试重新查找并选择第二个下拉元素。唯一的事情是,当我去寻找第二个元素(在第二次尝试中)时,它会为该元素提供 StaleException。 @optimist_creeper
    【解决方案2】:

    出现此问题是因为在第二个下拉列表中,选项取决于第一个。所以早些时候我只是在等待下拉框被加载。然而,在这种情况下,即使下拉框已加载,但下拉选项尚未加载到第二个下拉菜单。因此它给出了 StaleElement Exception。 解决这个问题的方法是在任何(随机)下拉选项上使用 FluentDriver 等待,一旦加载,就只能继续进行。

    【讨论】:

      【解决方案3】:

      在您问题的这两句话之间:

      Select admissionSource_select= new Select(admissionSource);
      Thread.sleep(10000);
      

      您是否需要执行以下操作:

      admissionSource_select.selectByVisibleText("Abc");
      

      其中 Abc 是该元素可见的名称。 您刚刚将下拉元素声明为 Select 类的实例。仅仅这样就足够了吗?当您尝试时,可能实际上选择了缺少的元素。您可以尝试添加上述语句,然后等待第二个下拉列表填充。

      【讨论】:

      • 在我的 sn-p 中,我没有添加该行(但在我的实际代码中我添加了该行)。但是,正如我之前提到的,问题是在我搜索选项时尚未加载这些选项。所以解决方法是使用流利的驱动程序等待选项被选中。
      • 太棒了!感谢您的澄清。很高兴它被排序。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多