我有一个下拉列表,我可以在第一时间按索引选择元素。当我尝试第二次选择元素时,它会抛出过时的元素引用错误。我尝试使用try catch block,显式等待,但没有任何效果。
WebElement drop = driver.findElement(By.cssSelector("#ctl00_mainPanel_MainPanel1_SearchStop1_DropDownRoute"));
Select sel_drop = new Select(drop);
List<WebElement> drop_count = sel_drop.getOptions();
int drop_size = drop_count.size();
System.out.println("size of drop down" + drop_size);
sel_drop.selectByIndex(1);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(250,0)", "");
sel_drop.selectByIndex(10);//this line is causing error-- when I am trying to select element from dropbox for second time.
答案 0 :(得分:2)
StaleElementReferenceException
。它已被更改,需要再次找到它。元素已更改,因为您执行了select
操作,并且其值已更改。
解决方案:再次找到您的元素:
WebElement drop = driver.findElement(By.cssSelector("#ctl00_mainPanel_MainPanel1_SearchStop1_DropDownRoute"));
Select sel_drop = new Select(drop);
List<WebElement> drop_count = sel_drop.getOptions();
int drop_size = drop_count.size();
System.out.println("size of drop down" + drop_size);
sel_drop.selectByIndex(1);
//below lines are crucial
drop = driver.findElement(By.cssSelector("#ctl00_mainPanel_MainPanel1_SearchStop1_DropDownRoute"));
sel_drop = new Select(drop);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(250,0)", "");
sel_drop.selectByIndex(10);//this line is causing error-- when I am trying to select element from dropbox for second time.
答案 1 :(得分:0)
如果没有相关的 HTML ,很难猜到在尝试选择第二个选项时看到StaleElementReferenceException的原因,但此时值得一提的是有效 usecase 将包含根据 HTML DOM 仅选择单个元素的步骤,并继续执行其他步骤。因此,根据您的代码块,如果选择第一个selectByIndex
正在运行,那么最好去。
WebElement drop = driver.findElement(By.cssSelector("#ctl00_mainPanel_MainPanel1_SearchStop1_DropDownRoute"));
Select sel_drop = new Select(drop);
List<WebElement> drop_count = sel_drop.getOptions();
int drop_size = drop_count.size();
System.out.println("size of drop down" + drop_size);
sel_drop.selectByIndex(1);
选择第一个<option>
调用 JavaScript 或 AjaxCall HTML DOM可能会被更改,新的相关元素可能会显示在页面上在这种情况下,<select>
代码可能会更改DOM Tree中的位置。因此,当您尝试选择第二个<option>
时,您需要再次标识<select>
标记,然后尝试选择第二个<option>
您可以在此处找到有关StaleElementReferenceException
的详细讨论