在Selenium webdriver中选择下拉列表时遇到问题

时间:2016-10-09 17:32:50

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

我正在尝试使用以下代码选择使用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)明确等待

请建议如何解决此问题。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

此问题即将发生,因为在第二次下拉列表中,选项取决于第一个。所以早些时候我只是在等待下拉框加载。但是在这种情况下,即使下拉框已加载但下拉选项尚未加载第二次下拉。因此它给出了StaleElement Exception。 解决这个问题的方法是使用FluentDriver等待任意(随机)下拉选项,一旦加载,然后再继续。

答案 2 :(得分:0)

Between these two sentences from your question:

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

Won't you need to do something like:

admissionSource_select.selectByVisibleText("Abc");

Where Abc is the name visible for that element. You have just declared the drop-down element to be an instance of Select class. Is merely that sufficient? May be actually selecting the element was missing when you tried. You can try with adding above statement and then waiting while 2nd drop-down populates.