2017-11-14 11 views
0

毎回StaleElementReferenceException例外があります。
ここには、pls helpという方法があります。Selenium Stale Elementリファレンス例外

private void selectAndClickRow(String elementName, boolean doubleClick) { 
    try { 
     String elementXpath = "//tr//td//div[contains(text(),'" + elementName + "')]"; 
     new WebDriverWait(Init.getWebDriver(), Init.getTimeOutInSeconds()).until(ExpectedConditions.visibilityOf(Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath(elementXpath)))); 
     WebElement row = table.findElements(By.xpath(elementXpath)).get(0); 
     row.click(); 
     if (doubleClick) { 
      row.click(); 
     } 
     Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath("//tr//td[contains(@class,'selected')]//div[contains(text(),'" + elementName + "')]")); 
    } catch (StaleElementReferenceException e) { 
     freeze(1); 
     selectAndClickRow(elementName, doubleClick); 
    } 
    waitToLoad(); 
} 

public WebElement waitUntilElementAppearsInDom(By by) { 
    Wait wait = new WebDriverWait(Init.getWebDriver(), (long)Init.getTimeOutInSeconds()); 
    wait.until(ExpectedConditions.presenceOfElementLocated(by)); 
    return Init.getWebDriver().findElement(by); 
} 

すでに要素研究を追加して1秒待っています。それは助けにはならない。

+0

「Init.getDriverExtensions()。waitUntilElementAppearsInDom'を表示できますか? – DebanjanB

+0

あなたは 'StaleElementReferenceException'を見ていますか? – DebanjanB

+0

@DebanjanB 'table.findElements(By.xpath(elementXpath))' – Nicolazz92

答えて

3

おそらく、要素をダブルクリックしようとしているようです。要素を2回クリックするのではなく、下記のようにactionsクラスを使用することができます。

private void selectAndClickRow(String elementName, boolean doubleClick) { 
    try { 
     String elementXpath = "//tr//td//div[contains(text(),'" + elementName + "')]"; 
     new WebDriverWait(Init.getWebDriver(), Init.getTimeOutInSeconds()).until(ExpectedConditions.visibilityOf(Init.getDriverExtensions().waitUntilElementAppearsInDom(By.xpath(elementXpath)))); 
     WebElement row = table.findElements(By.xpath(elementXpath)).get(0); 
     new Actions(driver).doubleClick(row).perform(); 
    } catch (StaleElementReferenceException e) { 
     //freeze(1); 
     //selectAndClickRow(elementName, doubleClick); 
    } 
    waitToLoad(); 
} 
+0

ありがとう、それは非常に便利です) – Nicolazz92

関連する問題