親愛なるすべて私は、呼び出されたWebドライバメソッドを記録するためにSelenium EventFiringWebDriverを使用しています。 「StaleReferenceException」を取得することが多いと認識していますが、HtmlUnitDriverだけでは問題はありません。EventFiringWebDriverの使用中にSelenium StaleElementReferenceExceptionが発生する
「StaleElementReferenceException」がスローされたにもかかわらず、ブラウザで「click()」という呼び出しが実行されたことも認識しました。
HtmlUnitDriverまたはFirefoxDriverスタンドアロンを使用しているときに、EventFiringWebDriverがそのような問題にぶつかる間に誰かがアイデアを持っていますか? EventFiringWebDriverのwrapped WebElementsが実行されていない間に、WebElementsが実行時に起点ドライバによって更新されることはありますか? これをEventFiringWebDriver実装のバグとして提起する必要がありますか? EventFiringWebDriverと
例コード - StaleElementReferenceException
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
ExtentReports extent = new ExtentReports ("report.html", true);
ExtentTest logger = extent.startTest("test");
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
eventDriver.register(new MyWebDriverEventListener(logger));
try {
WebElement element = null;
eventDriver.get("https://www.google.com");
element = eventDriver.findElement(By.xpath("//input[@type='text']"));
element.sendKeys("Test");
element.submit();
Thread.sleep(2000);
element = eventDriver.findElement(By.xpath("//div[@id='search']//a"));
String title = element.getText();
// HERE the StaleElementReferenceException get thrown ALTHOUGH the "click" event get processed by the browser, it loads already the page
try {
element.click();
} catch(StaleElementReferenceException ex) {
}
Thread.sleep(2000);
Assert.assertEquals(title, eventDriver.getTitle());
logger.log(LogStatus.PASS,"end","Test passed");
} catch(AssertionError error) {
logger.log(LogStatus.FAIL,"end","Test failed:" + error.getMessage());
throw error;
}
finally {
extent.endTest(logger);
extent.flush();
extent.close();
eventDriver.quit();
}
同じコードをスローします - ちょうど私が認識し、古い例外のスタックトレースを学んだ後も問題
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
ExtentReports extent = new ExtentReports ("report.html", true);
ExtentTest logger = extent.startTest("test");
try {
WebElement element = null;
driver.get("https://www.google.com");
element = driver.findElement(By.xpath("//input[@type='text']"));
element.sendKeys("Test");
element.submit();
Thread.sleep(2000);
element = driver.findElement(By.xpath("//div[@id='search']//a"));
String title = element.getText();
element.click();
Thread.sleep(2000);
Assert.assertEquals(title, driver.getTitle());
logger.log(LogStatus.PASS,"end","Test passed");
} catch(AssertionError error) {
logger.log(LogStatus.FAIL,"end","Test failed:" + error.getMessage());
throw error;
}
finally {
extent.endTest(logger);
extent.flush();
extent.close();
driver.quit();
}