Selenium и iframe

Хром в панели разработчика находит элемент по xPath, а Selenium не хочет по нему кликать и ругается, что элемент не найден.

Проблема в iframe. Selenium не видит элементы внутри iframe. Надо переключить фокус туда. Ну и не забыть потом вернуться.

driver.switchTo().frame(driver.findElement(By.xpath(«//iframe[@id=’iframeM’]»)));
driver.findElement(By.xpath(«//*[@id=’12345′]»)).click(); driverWrapper.switchTo().defaultContent();

Не успевает отработать Click

Исходные данные: автотест на java selenium. Столкнулся с ситуацией что после клика происходит долгая обработка данных и Selenium падает по таймауту. Перелопатил интернет, перепробовал все ожидания — явные, не явные и все другие включая банальную паузу:

            driver.manage().timeouts().setScriptTimeout(180, TimeUnit.SECONDS);
            driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS);
            driver.manage().timeouts().pageLoadTimeout(180, TimeUnit.SECONDS);

Ничего из этого не помогает. Автотест висит на клике, не переходит к следующей команде, а по истечению времени ожидания — падает.

Решение проблемы пришло с неожиданной для меня стороны и оказалось, как и все гениальное ), простым.

try {
                    driver.findElement(By.xpath("//*[@id='a_do_import']")).click();
                } catch (Exception exception) {
                    logger.info("Exception was catch, is waiting 2 min.");
                    new Pause("120000").act(driver, context, reporter);
                    logger.info("Reload page.");
                    ...
}

Ловим и обрабатываем ошибку сами.

Определяем точное время с учетом часового пояса и летнего/зимнего времени

Ниже пример для средне европейского времени.

Calendar c = Calendar.getInstance();
boolean isSummer = TimeZone.getTimeZone(«ECT»).inDaylightTime(c.getTime());
if (isSummer) {
//Summer time
c.add(Calendar.MINUTE, -60);
} else {
//Winter time
c.add(Calendar.MINUTE, -120);
}

Обратите внимание, здесь не используется устаревший класс Date().

Java жрет память

Что делать, если приложение написанное на Java жрет много оперативки? Может быть это ваш случай:

(где-то на хабре была байка, что один опытный разработчик начинал все программы с похожей строчки, а когда начальство жаловались, что памяти не хватает и надо оптимизировать код, уменьшал в ней число ;)

static int a[1024*1024*1024/sizeof(int)];

Java, работа с датой

Форматирование даты.
Преобразование даты в строку по формату.
увеличение даты на дни, недели или часы.


Date dateNow;
dateNow = new Date();
SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmssSSS");
SimpleDateFormat formatDate1 = new SimpleDateFormat("dd MM yyyy");
String newDeviceImei = formatDate.format(dateNow);
String startDate = formatDate1.format(dateNow);
Calendar c = Calendar.getInstance();
c.setTime(dateNow);
c.add(Calendar.DATE, 30);
Date currentDatePlus = c.getTime();
String endDate = formatDate1.format(currentDatePlus);
String deviceModel = "Apple iPhone 8";