Кратко о проблеме:
написал скрипт создания/добавления продукта в интернет-магазине на Мадженто. Без цикла, добавление продукта проходит на ура. Когда добавил цикл "while", скрипт начал зависать при открытии страницы (страница генирируется динамически).
При дебаге, прохождении пошагово - все нормально проходит. Вставлял задержки и ожидания - не помогло. Мне кажется возникает какой-то Exception. Обернул цикл в try{} catch (Exception e) {System.out.println(e);} - ошибка не выводится.
Возникли несколько вопросов:
1. Что лучше использовать Thread.sleep() или driver.manage().timeouts().implicitlyWait(X, TimeUnit.MILLISECONDS)?
и какая разница?
2. Как лучше реализовать ожидание появления елемента?
и как вывести сообщение о превышении времени ожидания?
Примерный код:
while (i<3) {
try {
// add product
//Thread.sleep(3000);
driver.manage().timeouts().implicitlyWait(3, TimeUnit.MILLISECONDS);
driver.findElement(By.xpath("//button[span='Add Product']")).click();
new Select(driver.findElement(By.id("attribute_set_id"))).selectByVisibleText("Type Attribute Product");
new Select(driver.findElement(By.id("product_type"))).selectByVisibleText("Simple Product");
//Thread.sleep(2000);
driver.manage().timeouts().implicitlyWait(2, TimeUnit.MILLISECONDS);
driver.findElement(By.xpath("//button[span='Continue']")).click();
// edit tab "General"
driver.manage().timeouts().implicitlyWait(3, TimeUnit.MILLISECONDS);
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("name")));
// ВОТ ЗДЕСЬ ЗАВИСАЕТ
driver.findElement(By.id("name")).clear();
driver.findElement(By.id("name")).sendKeys("AutoTestProduct#"+Integer.toString(i));
driver.findElement(By.id("description")).clear();
...
Thread.sleep(12000); // сохранение продукта
i++;
} catch (Exception e) {
System.out.println(e);
}
PS. Если браузер рефрешнуть или если тест не остановить и кликнуть на некоторых элементах (например: удаляю созданый продукт), то цикл идет дальше и создаются все новые продукты.