我是Selenium的新手。获得
运行以下代码时出现org.openqa.selenium.StaleElementReferenceException:元素不再有效(警告:服务器未提供任何堆栈跟踪信息)
错误。
期望:一旦方法“changdrawer”返回true,while循环应该恢复。如果我的代码需要更正,请帮助我。
public class ManageTaskList {
public void CheckRequestType() throws InterruptedException
{
//Switching the driver to TaskList frame
LaunchBrowser.driver.switchTo().frame("taskList");
boolean dateFlag=false;
String date = "06/12";
WebElement table = LaunchBrowser.driver.findElement(By.id("dataTable"));
List<WebElement> rows = table.findElements(By.tagName("tr"));
Iterator<WebElement> i = rows.iterator();
System.out.println("Table has following content");
while(i.hasNext())
{
WebElement row=i.next();
List<WebElement> columns= row.findElements(By.tagName("td"));
Iterator<WebElement> j = columns.iterator();
while(j.hasNext())
{
WebElement column = j.next();
String ColumnValues=column.getText();
//System.out.println("ColumnValues" + ColumnValues);
if (ColumnValues.contains(date))
{
System.out.println("Date confirmed" +ColumnValues );
dateFlag = true;
}
if (ColumnValues.contentEquals("Issue Change Drawer") && dateFlag==true)
{
System.out.println("Found Change Drawer");
dateFlag=false;
column.click();
ChangeDrawer();
Thread.sleep(100);
}
}
}
public boolean ChangeDrawer()
{
// Issue Change Drawer
LaunchBrowser.driver.findElement(By.xpath(".//*[@id='content']/div[3]/form/table/tbody/tr[2]/td/table/tbody/tr/td[1]/input")).click();
LaunchBrowser.driver.switchTo().defaultContent();
return true;
}
}
答案 0 :(得分:0)
如果changeDrawer方法(即单击元素)导致页面刷新,甚至表元素都要更改,即使您最终仍然有一个仍然匹配您的选择器的WebElement(在这种情况下,行) ),您仍然持有对“旧”对象的引用,该对象在页面中不再存在。
如果是这种情况,您需要再次调用findElement / s方法来刷新WebElement。