Как сохранить веб страницу


(Vol) #1

Всем привет,

Интересует вопрос, как правильно сохранять страницу с помощю WebDriver?

На даный момент я использую driver.getPageSource(), и записую что получилось в файл, выходит не очень достойно.

 

Ниже пример как я делаю:

       @Test

       public void testSomeThing(){

             FirefoxDriver driver = new FirefoxDriver();

             driver.get("http://google.com");

             String pageSource = driver.getPageSource();

             writeInFile(System.getProperty("user.dir")+"/target/logs/testPage.html", pageSource);

       }

       public static void writeInFile(String sFileName, String sTextToWrite){

             FileWriter outFile;

             General.sendComments("Write to file: " + sFileName);

             try {

                    outFile = new FileWriter(sFileName);

                    PrintWriter out = new PrintWriter(outFile);

                    out.print(sTextToWrite);

                    out.close();

             } catch (IOException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

             }

       }

 

Может кто-то посоветовать, как правильно сохранять страницу? чтоб отображались все обьекты + страница не искажалась?

 


(Mykhailo Poliarush) #2

выходит не очень достойно - что имелось ввиду? какие проблемы с сохранением или искажением страницы?


(Taras) #3

Вы имеете в виду "сохранить страницу полностью" как это делает Save As в браузере ?


(Vol) #4

именно


(Vol) #5

Проблемы с отображением страницы:

1. Неправильная кодировка (вместо текста - какие-то символы)

2. Нет отображения картинок

3. Все обьекты ссунуты вниз.


(Taras) #6

Вам нужно Auto IT заюзать для этого

но на отдаленной машине работать не будет


(Mykhailo Poliarush) #7

такой задачи именно не делал, но тут есть подводные камни

для правильного отображения нужно не только html а еще все внешние от html ресурсы ввиде css, javascript, картинок и файлов. 

если прям уж нужно получить страницу как она выглядит, то я бы читал meta или head, парсил бы все ссылки, скачивал их на локальную машину, а потом заменил в html все ссылки на локальные файлы.

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


(apetrovskiy) #8

Если приложение не слишком гуи-интенсивное, гуе-тестилки могут работать через PSexec. Я запускал пауэршелл для тестирования приложения в MMC, для нашего приложения пропускная способноть Руссиновичского тула оказалась мала (а исходников опубликованных уже десять лет как нет). ВЫглядело этак полупрозрачно :), т.е. не прорисовывалось до конца.

Альтернатива - PowerSLIM. Может запускать как пауэршельные скрипты, так и любые утилиты, которыми вы можете управлять из пауэршельной сессии.

Если надо, могу где-нибудь запостить пример соответствующего куска фитнеса (где?).


(Vol) #9

apetrovskiy, Вы меня заинтриговали своими рассказами, можете поделиться примером прямо в этом топике, желательно с прикруткой к Джаве :)


(apetrovskiy) #10

Погодите, это должно было идти в ответ на "Вам нужно Auto IT заюзать для этого

но на отдаленной машине работать не будет".

В смысле, что "нечто стороннее, чем сохранить страницу через GUI automation".

 

Если у вас это из кода джава-селениум - ну, теоретически можно (я не джавист, видел пример кода в инете), запускают cmd через java.io, а в cmd уже можно вызвать exe или script. Вроде бы пример даже значение мог вернуть.

Но нужно ли такую громоздкость городить. Если бы это был Selenium+.NET, я бы с ходу рекомендовал MS UI Automation прямо из кода .NET.

А если таки вызвать cmd, то можно сделать кликалку FindWindowEx/SendMessage или IUIAutomation на C++.

Вот, одна из наугад взятых ссылок:

http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/

 

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

Тут как раз запуск ИЗ кода джавы имеет смысл.

 

 

Если же вы хотите именно что угодно внешнее для GUI автоматизации сохраненеия страницы (и синхронизацией одного с другим меня не тревожите :)), то могу завтра сделать ветку фитнеса (то бишь выкинуть оттуда 90% ненужного).