У меня есть следующий код в тесте веб-драйвера Selenium 2, который работает во время отладки, но в большинстве случаев терпит неудачу, когда я запускаю его в сборке. Я знаю, что это должно быть как-то связано с тем, что страница не обновляется, но не знаю, как решить эту проблему, поэтому приветствуются любые указания на то, что я сделал неправильно. Я использую Primefaces JSF в качестве платформы веб-приложений. Когда я нажимаю ссылку «Добавить новую», появляется всплывающее диалоговое окно с полем ввода, в которое я могу ввести дату, а затем нажать «Сохранить». Именно при получении элемента ввода для ввода текста я получаю исключение устаревшей ссылки на элемент.
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EnterActiveSubmissionIntegrationTest {
Map tableData = new HashMap();
@Test
public void testEnterActiveSubmission() throws Exception {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
System.setProperty("webdriver.chrome.driver", "C:/apps/chromedriver.exe");
WebDriver driver = new ChromeDriver();
// And now use this to visit Google
driver.get("http://localhost:8080/strfingerprinting");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.linkText("Manage Submissions"));
element.click();
parseTableData(driver, "form:submissionDataTable_data", 1);
assertEquals(tableData.get("form:submissionDataTable_data").get("12"), "Archived");
WebElement newElement = driver.findElement(By.linkText("Add new"));
newElement.click();
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(new ExpectedCondition() {
public Boolean apply(WebDriver driver) {
WebElement button = driver.findElement(By
.name("createForm:dateInput_input"));
if (button.isDisplayed())
return true;
else
return false;
}
});
WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));
textElement.sendKeys("24/04/2013");
WebElement saveElement = driver.findElement(By.name("createForm:saveButton"));
saveElement.click();
driver.navigate().refresh();
parseTableData(driver, "form:submissionDataTable_data", 2);
//Close the browser
driver.quit();
}
private void parseTableData(WebDriver driver, String id, int expectedRows) {
// Check the title of the page or expected element on page
WebElement subTableElement = driver.findElement(By.id(id));
List tr_collection=subTableElement.findElements(By.xpath("id('"+ id + "')/tr"));
assertEquals("incorrect number of rows returned", expectedRows, tr_collection.size());
int row_num,col_num;
row_num=1;
if(tableData.get(id) == null) {
tableData.put(id, new HashMap());
}
Map subTable = tableData.get(id);
for(WebElement trElement : tr_collection)
{
List td_collection=trElement.findElements(By.xpath("td"));
col_num=1;
for(WebElement tdElement : td_collection)
{
subTable.put(row_num + "" + col_num, tdElement.getText());
col_num++;
}
row_num++;
}
}
}
Когда я запускаю это, я получаю следующее исключение, но оно может произойти
WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));
или
if (button.isDisplayed())
трассировка исключений
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: chrome=26.0.1410.64)
(Driver info: chromedriver=0.8,platform=Windows NT 6.0 SP2 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 56 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_ ... rence.html
Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
System info: os.name: 'Windows Vista', os.arch: 'x86', os.version: '6.0', java.version: '1.6.0_10'
Session ID: 784c53b99ad83c44d089fd04e9a42904
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, rotatable=false, driverVersion=0.8, locationContextEnabled=true, version=26.0.1410.64, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
at org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:320)
at com.integration.web.EnterActiveSubmissionIntegrationTest$1.apply(EnterActiveSubmissionIntegrationTest.java:58)
at com.integration.web.EnterActiveSubmissionIntegrationTest$1.apply(EnterActiveSubmissionIntegrationTest.java:1)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
at com.integration.web.EnterActiveSubmissionIntegrationTest.testEnterActiveSubmission(EnterActiveSubmissionIntegrationTest.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Подробнее здесь: https://stackoverflow.com/questions/161 ... -exception
Selenium WebDriver Как устранить исключение ссылки на устаревший элемент? ⇐ JAVA
Программисты JAVA общаются здесь
1732606368
Anonymous
У меня есть следующий код в тесте веб-драйвера Selenium 2, который работает во время отладки, но в большинстве случаев терпит неудачу, когда я запускаю его в сборке. Я знаю, что это должно быть как-то связано с тем, что страница не обновляется, но не знаю, как решить эту проблему, поэтому приветствуются любые указания на то, что я сделал неправильно. Я использую Primefaces JSF в качестве платформы веб-приложений. Когда я нажимаю ссылку «Добавить новую», появляется всплывающее диалоговое окно с полем ввода, в которое я могу ввести дату, а затем нажать «Сохранить». Именно при получении элемента ввода для ввода текста я получаю исключение устаревшей ссылки на элемент.
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class EnterActiveSubmissionIntegrationTest {
Map tableData = new HashMap();
@Test
public void testEnterActiveSubmission() throws Exception {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
System.setProperty("webdriver.chrome.driver", "C:/apps/chromedriver.exe");
WebDriver driver = new ChromeDriver();
// And now use this to visit Google
driver.get("http://localhost:8080/strfingerprinting");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.linkText("Manage Submissions"));
element.click();
parseTableData(driver, "form:submissionDataTable_data", 1);
assertEquals(tableData.get("form:submissionDataTable_data").get("12"), "Archived");
WebElement newElement = driver.findElement(By.linkText("Add new"));
newElement.click();
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(new ExpectedCondition() {
public Boolean apply(WebDriver driver) {
WebElement button = driver.findElement(By
.name("createForm:dateInput_input"));
if (button.isDisplayed())
return true;
else
return false;
}
});
WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));
textElement.sendKeys("24/04/2013");
WebElement saveElement = driver.findElement(By.name("createForm:saveButton"));
saveElement.click();
driver.navigate().refresh();
parseTableData(driver, "form:submissionDataTable_data", 2);
//Close the browser
driver.quit();
}
private void parseTableData(WebDriver driver, String id, int expectedRows) {
// Check the title of the page or expected element on page
WebElement subTableElement = driver.findElement(By.id(id));
List tr_collection=subTableElement.findElements(By.xpath("id('"+ id + "')/tr"));
assertEquals("incorrect number of rows returned", expectedRows, tr_collection.size());
int row_num,col_num;
row_num=1;
if(tableData.get(id) == null) {
tableData.put(id, new HashMap());
}
Map subTable = tableData.get(id);
for(WebElement trElement : tr_collection)
{
List td_collection=trElement.findElements(By.xpath("td"));
col_num=1;
for(WebElement tdElement : td_collection)
{
subTable.put(row_num + "" + col_num, tdElement.getText());
col_num++;
}
row_num++;
}
}
}
Когда я запускаю это, я получаю следующее исключение, но оно может произойти
WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));
или
if (button.isDisplayed())
трассировка исключений
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: chrome=26.0.1410.64)
(Driver info: chromedriver=0.8,platform=Windows NT 6.0 SP2 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 56 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
System info: os.name: 'Windows Vista', os.arch: 'x86', os.version: '6.0', java.version: '1.6.0_10'
Session ID: 784c53b99ad83c44d089fd04e9a42904
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, rotatable=false, driverVersion=0.8, locationContextEnabled=true, version=26.0.1410.64, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
at org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:320)
at com.integration.web.EnterActiveSubmissionIntegrationTest$1.apply(EnterActiveSubmissionIntegrationTest.java:58)
at com.integration.web.EnterActiveSubmissionIntegrationTest$1.apply(EnterActiveSubmissionIntegrationTest.java:1)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
at com.integration.web.EnterActiveSubmissionIntegrationTest.testEnterActiveSubmission(EnterActiveSubmissionIntegrationTest.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Подробнее здесь: [url]https://stackoverflow.com/questions/16166261/selenium-webdriver-how-to-resolve-stale-element-reference-exception[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия