PhantomJS, Selenium можно ли только часть действий визуализировать

130
20 марта 2018, 01:04

Selenium я уже использовал, но мне не совсем подходит то, что я вижу все эти промежуточные страницы и тот факт, что это настолько же медленно, если бы я сам кликал по сайту. Знаю есть PhantomJS и как я понял он делает ровно то же что и селениум но без визуализации (поправьте если ошибаюсь). Мне бы не мало времени сэкономило знание о том, можно ли сделать все промежуточные запросы без визуализации и визуализировать только последнюю страницу? И всё это на java.
Еще как человеку, который первый раз попробовал селениум, расскажите о ожиданиях, о разнице с использованием Хром вебдрайвера и PhantomJS. Сам я понял, что существуют некие явные и неявные ожидания. Например должен прогрузиться javascript, каков алгоритм ожидания? Тупо пробовать не появился ли элемент в течении определенного времени?

Answer 1

PhantomJS и selenium - совершенно разные вещи. selenium - просто инстумент.

Итак, у вас задача запускать тесты так, чтобы они вам не мешали, но при этом в конце вы могли увидеть некоторые шаги.

Если это один и тотже сайт и имеются непрерывные шаги для достижения этого шага, то нельзя. Но есть один пару вариантов решения.

  1. Вы используете 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);
    
  2. Если шаги непреравные и вы не можете продолжить уже в новом браузере. то можно добавить создание скриншота для каждой операции, либо запись видео. Таким образом вы сможете увидеть, что происходит.

Имеются несколько видов ожидания:

  • Неявные ожидания - 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

READ ALSO
Черно-белое изображение в Canvas

Черно-белое изображение в Canvas

Для отображения объектов на холсте использую следующий View:

141
Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибкуError:(34, 41) error: incompatible...

169
Как исключить из обфускации пакет

Как исключить из обфускации пакет

Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?

149
Деплой сервлета вручную на Tomcat: NotFound

Деплой сервлета вручную на Tomcat: NotFound

Создал простой сервлет:

156