Всем, Добрый день!
Есть основная форма веб клиента, так же на этой форме много разных кнопок. При нажатии одной из кнопок открывается еще одно окно выбора товара, в котором нужно кликнуть по товару, после чего форма закроется и товар отобразится на главной форме.
Подскажите, пожалуйста, как обработать такую ситуацию с помощью Selenium используя язык Java?
У меня получается открыть второе окно, но кликнуть и выбрать товар никак…Видимо там как то фокус нужно установить на вторую форму?
public class test1 {
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver =new InternetExplorerDriver();
baseUrl = "http://localhost/test1";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testSample() throws Exception {
driver.get(baseUrl);
driver.findElement(By.id("loginContainer_username")).clear();
driver.findElement(By.id("loginContainer_username")).sendKeys("da");
driver.findElement(By.id("loginContainer_password")).clear();
driver.findElement(By.id("loginContainer_password")).sendKeys("da");
driver.findElement(By.name("loginContainer$ctl05")).click();
driver.findElement(By.id("tdImbButtonmenu_2")).click();
driver.findElement(By.id("manageFilter_ctl00_filterItem_buttonEnter_popupButton")).click();
driver.findElement(By.id("itemDataGrid_ctl03_ctl05")).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
dt_astronaut, Вы можете на моем примере который выше показать как использовать Ваш код.
Я только начинаю изучать Selenium. Пока вот застрял на этой проблеме. Мне бы хоть глазком глянуть пример какой нить похожий.Спасибо.
Добрый день!
dt_astronaut, спасибо что помогаете, вроде сделал так как Вы сказали, но валится на ошибке:
org.openqa.selenium.NoSuchWindowException: Unable to find element on closed window (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 16 milliseconds
Без switchTO() по какой ошибке вылетает? Если рассматривать первоначальный вариант.
Искать элементы по их id получается далеко не всегда. Вполне возможно сейчас у тех же самых элементов другие id
org.openqa.selenium.NoSuchElementException: Unable to find element with id == itemDataGrid_ctl03_ctl05 (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 30.27 seconds
org.openqa.selenium.NoSuchElementException: Unable to find element with id == itemDataGrid_ctl03_ctl05 (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 30.16 seconds
Ну то есть всё-таки это отдельное окно браузера. Хорошо, что всё заработало, но твоя реализация не будет стабильно работать по двум причинам:
Без ожидания окна, периодически будет падать из-за ненайденного popup
Поскольку Set не гарантирует последовательность, то периодически mainWindow и popUp будут содержать противоположные значения и элемент не будет найден
Поэтому в твоем случае можно сделать например так:
Handle главного окна mainWindow получать до клика, по которому открывается всплывающее окно. После клика ожидать (через WebDriverWait, а не Sleep ни в коем случае) когда getWindowHandles.Count вернет на 1 больше и после этого искать в Set элемент не равный mainWindow, это и будет popUp.
Таким образом ты обойдешь обе описанные выше проблемы и твои тесты будут работать стабильно