Selenium я уже использовал, но мне не совсем подходит то, что я вижу все эти промежуточные страницы и тот факт, что это настолько же медленно, если бы я сам кликал по сайту. Знаю есть PhantomJS и как я понял он делает ровно то же что и селениум но без визуализации (поправьте если ошибаюсь). Мне бы не мало времени сэкономило знание о том, можно ли сделать все промежуточные запросы без визуализации и визуализировать только последнюю страницу? И всё это на java.
Еще как человеку, который первый раз попробовал селениум, расскажите о ожиданиях, о разнице с использованием Хром вебдрайвера и PhantomJS. Сам я понял, что существуют некие явные и неявные ожидания. Например должен прогрузиться javascript, каков алгоритм ожидания? Тупо пробовать не появился ли элемент в течении определенного времени?
PhantomJS и selenium - совершенно разные вещи. selenium - просто инстумент.
Итак, у вас задача запускать тесты так, чтобы они вам не мешали, но при этом в конце вы могли увидеть некоторые шаги.
Если это один и тотже сайт и имеются непрерывные шаги для достижения этого шага, то нельзя. Но есть один пару вариантов решения.
Вы используете chromedriver и chromebrowser v57 и выше. Тепрь хром поддерживает мод --headless
, который позволяет запускать браузер в НЕ интерактивном режиме, то есть без GUI. вы доходите до нужного шага и запускаете еще одну версия ChromeDriver() уже без аргумента --headless
. Таким образом дальнейшие действия можно увидеть.
ChromeOptions options = new ChromeOptions();
List<String> switches = new ArrayList<String>();
switches.add("--headless");
options.addArguments(switches);
driver = new ChromeDriver(options);
Если шаги непреравные и вы не можете продолжить уже в новом браузере. то можно добавить создание скриншота для каждой операции, либо запись видео. Таким образом вы сможете увидеть, что происходит.
Имеются несколько видов ожидания:
Неявные ожидания - Implicit Waits - конфигурируют экземпляр WebDriver делать многократные попытки найти элемент (элементы) на странице в течении заданного периода времени, если элемент не найден сразу. Tолько по истечении этого времени WebDriver бросит ElementNotFoundException.
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(“http://some_url“);
WebElement dynamicElement =
driver.findElement(By.id(“dynamicElement_id”));
Неявные ожидания обычно настраиваются сразу после создания экземпляра WebDriver и действуют в течении всей жизни этого экземпляра, хотя переопределить их можно в любой момент. К этой группе ожиданий также можно отнести неявное ожидание загрузки страницы:
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
А также неявное ожидание отработки скриптов:
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);
Явные ожидания - Explicit Waits - это код, который ждет наступления какого-то события, прежде чем продолжит выполнение. Такое ожидание срабатывает один раз в указанном месте.
WebElement dynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("dynamicElement_id")));
Блоее подробно можно почитать тут
P.s. теперь chromedriver работает быстрее, чем PhantomJS
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибкуError:(34, 41) error: incompatible...
Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?