Логгирование действий Selenium WebDriver
#1
Отправлено 18 октября 2013 - 13:34
Приступил к изучению автоматизации тестирования и возник вопрос.
Если пользоваться Selenium IDE, то можно переключить логи в INFO и смотреть через плагин Mozilla все действия selenium-а.
Теперь вопрос номер 1:
Написав программу в java, я до сих пор не разобрался как включить аналогичное Selenium IDE логгирование в консоли. Подскажите, пожалуйста.
Гугление по java.utils.logging ничего не дало (туповат, наверное?)
гугление по selenium webdriver logging тоже ничего не дало.
Перепробовал все с capabilities, driver.manage.logs и т.д.
Пока я не использую никаких фреймворков и т.д. - только чистый eclipse.
Вопрос номер 2:
А стоит ли включать полное логгирование или лучше каждое действие типа
driver.findElement(By.id(ShortForm.getGoToNextStepId())).click();
сопровождать кодом System.out.println("Clicking blah-blah");
Также видел, что можно как-то на ивенты поставить определенные условия, но не разобрался.
В общем на данный момент такая каша в голове, не судите строго, а лучше помогите :))))
#2
Отправлено 18 октября 2013 - 14:22
А зачем Вам вообще логировать каждое действие?Доброго времени суток.
Приступил к изучению автоматизации тестирования и возник вопрос.
Если пользоваться Selenium IDE, то можно переключить логи в INFO и смотреть через плагин Mozilla все действия selenium-а.
Теперь вопрос номер 1:
Написав программу в java, я до сих пор не разобрался как включить аналогичное Selenium IDE логгирование в консоли. Подскажите, пожалуйста.
Гугление по java.utils.logging ничего не дало (туповат, наверное?)
гугление по selenium webdriver logging тоже ничего не дало.
Перепробовал все с capabilities, driver.manage.logs и т.д.
Пока я не использую никаких фреймворков и т.д. - только чистый eclipse.
Вопрос номер 2:
А стоит ли включать полное логгирование или лучше каждое действие типа
driver.findElement(By.id(ShortForm.getGoToNextStepId())).click();
сопровождать кодом System.out.println("Clicking blah-blah");
Также видел, что можно как-то на ивенты поставить определенные условия, но не разобрался.
В общем на данный момент такая каша в голове, не судите строго, а лучше помогите :))))
Это ещё можно понять, когда тестов максимум десять, и все они короткие.
Но если их несколько сотен, а то и тысяч? Вы представляете, какая свалка мусора будет в логе?
Если Вам очень сильно хочется отловить момент ошибки, то можете обернуть в try-catch нужные блоки с выводом в лог нужного текста в случае возникновения ошибки в этом месте.
В результате в лог-файле / консоли Вы увидите только нужную информацию.
#3
Отправлено 18 октября 2013 - 14:45
А зачем Вам вообще логировать каждое действие?
Доброго времени суток.
Приступил к изучению автоматизации тестирования и возник вопрос.
Если пользоваться Selenium IDE, то можно переключить логи в INFO и смотреть через плагин Mozilla все действия selenium-а.
Теперь вопрос номер 1:
Написав программу в java, я до сих пор не разобрался как включить аналогичное Selenium IDE логгирование в консоли. Подскажите, пожалуйста.
Гугление по java.utils.logging ничего не дало (туповат, наверное?)
гугление по selenium webdriver logging тоже ничего не дало.
Перепробовал все с capabilities, driver.manage.logs и т.д.
Пока я не использую никаких фреймворков и т.д. - только чистый eclipse.
Вопрос номер 2:
А стоит ли включать полное логгирование или лучше каждое действие типа
driver.findElement(By.id(ShortForm.getGoToNextStepId())).click();
сопровождать кодом System.out.println("Clicking blah-blah");
Также видел, что можно как-то на ивенты поставить определенные условия, но не разобрался.
В общем на данный момент такая каша в голове, не судите строго, а лучше помогите :))))
Это ещё можно понять, когда тестов максимум десять, и все они короткие.
Но если их несколько сотен, а то и тысяч? Вы представляете, какая свалка мусора будет в логе?
Если Вам очень сильно хочется отловить момент ошибки, то можете обернуть в try-catch нужные блоки с выводом в лог нужного текста в случае возникновения ошибки в этом месте.
В результате в лог-файле / консоли Вы увидите только нужную информацию.
То есть вы предлагаете обернуть весь главный класс в try-catch ?
#4
Отправлено 18 октября 2013 - 14:57
То есть вы предлагаете обернуть весь главный класс в try-catch ?
Что значит класс ?
То что нужно в тесте оберни в try catch
#5
Отправлено 18 октября 2013 - 15:08
То есть вы предлагаете обернуть весь главный класс в try-catch ?
Что значит класс ?
То что нужно в тесте оберни в try catch
Из главного класса public static Main(string[] args) вызываются другие классы и методы.
Как мне сделать так, чтобы не париться и логгировались действия/ошибки?
Чтобы не заморачиваться сильно я и предлагаю для начала хотя бы выводить просто ВСЁ!!!
А потом уже буду работать с логгером, мне нужно ПРОСТО ДЛЯ НАЧАЛА хотя бы!!! :)
Поймите, мне не нужно как лучше сейчас, мне нужно просто для галочки, чтобы были логи.
Рефакторить мне ещё долго эти тесты.
#6
Отправлено 18 октября 2013 - 15:34
class FirstApp { public static void main(String[] args) { try{ код вашего теста }catch(Exception e){ log(e.getMessage); log(e.stackTrace) } } }
Если у вас тест построен на функциях - можете вставлять try-catch в каждую функцию.
#7
Отправлено 18 октября 2013 - 15:46
class FirstApp { public static void main(String[] args) { try{ код вашего теста }catch(Exception e){ log(e.getMessage); log(e.stackTrace) } } }
Если у вас тест построен на функциях - можете вставлять try-catch в каждую функцию.
Спасибо! А как теперь сделать так, чтобы выводить в консоль не только ошибки, но и логгировать каждый клик или ввод текста? :) Что-то на тему LOG_LEVEL = INFO или как-то так?
#8
Отправлено 18 октября 2013 - 16:15
Именно это я и спросил в первом комментарии: зачем Вам логировать абсолютно всё?Спасибо! А как теперь сделать так, чтобы выводить в консоль не только ошибки, но и логгировать каждый клик или ввод текста? :) Что-то на тему LOG_LEVEL = INFO или как-то так?
Вы хотите удостовериться, что клик действительно произведён? А глазами в браузере не видно?
#9
Отправлено 18 октября 2013 - 18:41
Именно это я и спросил в первом комментарии: зачем Вам логировать абсолютно всё?
Спасибо! А как теперь сделать так, чтобы выводить в консоль не только ошибки, но и логгировать каждый клик или ввод текста? :) Что-то на тему LOG_LEVEL = INFO или как-то так?
Вы хотите удостовериться, что клик действительно произведён? А глазами в браузере не видно?
Сергей, спасибо за внимание к топику.
А зачем мне логировать "НЕ ВСЕ"? :))) Зачем я сейчас буду отходить от основной цели (написание тест-кейсов и кода) и начну ковыряться в настройках и логгировании ошибок? Тем более простой try catch не вариант, ибо у профессионалов там все гораздо серьезнее реализовано (судя по беглому просмотру гугла).
Поэтому я и прошу - как мне включить простейшее СТАНДАРТНОЕ логгирование в selenium webdriver!!!!
Если вы не знаете как это сделать, то прошу на этом Ваши комментарии прекратить. Не волнуйтесь, мы пообщаемся, когда я буду рефакторить код и думать как логгировать лучше :))))
Спасибо!
#10
Отправлено 18 октября 2013 - 19:59
Затем, чтобы не утонуть в логах при анализе.А зачем мне логировать "НЕ ВСЕ"? :)))
Логирование должно быть только нужного, а не идти потоком всего и вся.
Не отходите. Нужно что-то узнать при конкретном действии - System.out.println() Вам в помощь. А try-catch ещё лучше, ибо дополнительно к нужным Вам выводам в консоль отловит любое исключение при падении.Зачем я сейчас буду отходить от основной цели (написание тест-кейсов и кода) и начну ковыряться в настройках и логгировании ошибок?
Вы действительно считаете, что профессионалы логируют каждый чих селениума?Тем более простой try catch не вариант, ибо у профессионалов там все гораздо серьезнее реализовано (судя по беглому просмотру гугла).
Правильно заданный вопрос - это уже половина ответаПоэтому я и прошу - как мне включить простейшее СТАНДАРТНОЕ логгирование в selenium webdriver!!!!
Прежде, чем что-то делать, надо уметь отвечать (хотя бы себе самому) на три главных вопроса по порядку:Если вы не знаете как это сделать, то прошу на этом Ваши комментарии прекратить.
1) ЗАЧЕМ мне это нужно?
2) ЧТО именно я хочу сделать?
3) КАК я это буду делать?
Вы не можете внятно ответить даже на первый, но начинаете хамить. Нехорошо.
Боюсь, с Вашим стилем ведения диалога наше с Вами обсуждение Вашего рефакторинга маловероятно.Не волнуйтесь, мы пообщаемся, когда я буду рефакторить код и думать как логгировать лучше :))))
Удачи!
#11
Отправлено 20 октября 2013 - 16:34
Затем, чтобы не утонуть в логах при анализе.
А зачем мне логировать "НЕ ВСЕ"? :)))
Логирование должно быть только нужного, а не идти потоком всего и вся.Не отходите. Нужно что-то узнать при конкретном действии - System.out.println() Вам в помощь. А try-catch ещё лучше, ибо дополнительно к нужным Вам выводам в консоль отловит любое исключение при падении.Зачем я сейчас буду отходить от основной цели (написание тест-кейсов и кода) и начну ковыряться в настройках и логгировании ошибок?
Вы действительно считаете, что профессионалы логируют каждый чих селениума?Тем более простой try catch не вариант, ибо у профессионалов там все гораздо серьезнее реализовано (судя по беглому просмотру гугла).
Правильно заданный вопрос - это уже половина ответа />/>Поэтому я и прошу - как мне включить простейшее СТАНДАРТНОЕ логгирование в selenium webdriver!!!!
Прежде, чем что-то делать, надо уметь отвечать (хотя бы себе самому) на три главных вопроса по порядку:Если вы не знаете как это сделать, то прошу на этом Ваши комментарии прекратить.
1) ЗАЧЕМ мне это нужно?
2) ЧТО именно я хочу сделать?
3) КАК я это буду делать?
Вы не можете внятно ответить даже на первый, но начинаете хамить. Нехорошо. />/>Боюсь, с Вашим стилем ведения диалога наше с Вами обсуждение Вашего рефакторинга маловероятно.Не волнуйтесь, мы пообщаемся, когда я буду рефакторить код и думать как логгировать лучше :))))
Удачи!
Опускаю первые цитаты ваши, перейдем сразу к "правильно заданный вопрос" и "ответ".
Сразу видно, что к авто-тестированию с использованием selenium webdriver 2 вы отношения не имеете, ибо даёте ссылку на модуль логгирования для selenium ide, ЛОЛ!!!!
Даже если вы и что-то автоматизируете, то даёте ссылки, даже не прочитав о чем идет речь. Какое к вам должно быть отношение? Естественно, отрицательное. То есть вам лишь бы что-то написать. Однако, минус вам :)
Про ответ на три вопроса - я сказал, что нужно логгирование для того, "чтобы было". Вы что, не в России живете? :)
Ну раз маловероятно, просьба обходить данный топик стороной в дальнейшем, ибо продолжение дискуссии малопродуктивно и скорее всего выявит в вас ещё более некомпетентного специалиста :)
Удачи!
#12
Отправлено 21 октября 2013 - 05:47
InternetExplorerDriverService.Builder service = new InternetExplorerDriverSerivce.Builder();
service = service.withLogLevel(InternetExplorerDriverLogLevel.TRACE);
service = service.withLogFile(new File("selenium.log"));
WebDriver driver = new InternetExplorerDriver(service.build());
Тема закрыта.
#13
Отправлено 21 октября 2013 - 06:56
((RemoteWebDriver) driver).setLogLevel(Level.SEVERE)
#14
Отправлено 21 октября 2013 - 09:58
Имхо логи селениума будут приятнее, чем драйвера браузера.
((RemoteWebDriver) driver).setLogLevel(Level.SEVERE)
К сожалению, у меня нет такого уровня логгирования в InternetExplorerDriver :(
#16
Отправлено 21 октября 2013 - 11:44
А причем тут InternetExplorerDriver?
setLogLevel
Добавил в код ((RemoteWebDriver)driver).setLogLevel(Level.ALL);
компилятор не ругается, но как теперь заставить драйвер писать логи? :))
Попытался воспользоваться кодом :
public void analyzeLog() {
LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
for (LogEntry entry : logEntries) {
System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
//do something useful with the data
}
}
На что получил экспешн:
Exception in thread "main" org.openqa.selenium.WebDriverException: Command not found: POST /session/90cc5d95-97cd-4fa0-87a2-b28d0277fb66/log
Command duration or timeout: 0 milliseconds
Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.7.0_40'
Session ID: 90cc5d95-97cd-4fa0-87a2-b28d0277fb66
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=8, ie.usePerProcessProxy=false, ignoreProtectedModeSettings=false, cssSelectorsEnabled=true, requireWindowFocus=false, initialBrowserUrl=http://localhost:13964/, handlesAlerts=true, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:34)
at org.openqa.selenium.remote.RemoteLogs.getRemoteEntries(RemoteLogs.java:65)
at org.openqa.selenium.remote.RemoteLogs.get(RemoteLogs.java:61)
at ru.bin.bank.AnalyzeLogs.analyzeLog(AnalyzeLogs.java:16)
at ru.bin.bank.Transact52Example.main(Transact52Example.java:44)
В общем пока то, что я нашел - единственный вариант, по-видимому)
#17
Отправлено 21 октября 2013 - 12:48
WebDriver driver = new InternetExplorerDriver(); ((RemoteWebDriver) driver).setLogLevel(Level.SEVERE); try { FileHandler fh = new FileHandler("c:\\log.txt"); fh.setFormatter(new SimpleFormatter()); java.util.logging.Logger.getLogger( RemoteWebDriver.class.getName()).addHandler(fh); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } driver.get("http://google.ru"); driver.findElement(By.xpath("//input[1]")); driver.quit();log.txt
21.10.2013 15:42:19 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: get [be582034-dcba-46ec-a57f-48d01799756d, get {url=http://google.ru}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, get {url=http://google.ru}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: findElement [be582034-dcba-46ec-a57f-48d01799756d, findElement {using=xpath, value=//input[1]}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, findElement {using=xpath, value=//input[1]}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: quit [be582034-dcba-46ec-a57f-48d01799756d, quit {}] 21.10.2013 15:42:24 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, quit {}]
#18
Отправлено 21 октября 2013 - 13:33
WebDriver driver = new InternetExplorerDriver(); ((RemoteWebDriver) driver).setLogLevel(Level.SEVERE); try { FileHandler fh = new FileHandler("c:\\log.txt"); fh.setFormatter(new SimpleFormatter()); java.util.logging.Logger.getLogger( RemoteWebDriver.class.getName()).addHandler(fh); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } driver.get("http://google.ru"); driver.findElement(By.xpath("//input[1]")); driver.quit();log.txt21.10.2013 15:42:19 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: get [be582034-dcba-46ec-a57f-48d01799756d, get {url=http://google.ru}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, get {url=http://google.ru}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: findElement [be582034-dcba-46ec-a57f-48d01799756d, findElement {using=xpath, value=//input[1]}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, findElement {using=xpath, value=//input[1]}] 21.10.2013 15:42:22 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executing: quit [be582034-dcba-46ec-a57f-48d01799756d, quit {}] 21.10.2013 15:42:24 org.openqa.selenium.remote.RemoteWebDriver log SEVERE: Executed: [be582034-dcba-46ec-a57f-48d01799756d, quit {}]
Круто! Спасибо.
Жалко только, что логгируются id-шнички и ссылки на объекты в памяти :) :
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executing: getElementAttribute [77854219-d87e-477a-82ab-e261619576d7, getElementAttribute {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e, name=index}]
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executed: [77854219-d87e-477a-82ab-e261619576d7, getElementAttribute {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e, name=index}]
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executing: isElementSelected [77854219-d87e-477a-82ab-e261619576d7, isElementSelected {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e}]
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executed: [77854219-d87e-477a-82ab-e261619576d7, isElementSelected {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e}]
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executing: clickElement [77854219-d87e-477a-82ab-e261619576d7, clickElement {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e}]
окт 21, 2013 5:30:36 PM org.openqa.selenium.remote.RemoteWebDriver log
SEVERE: Executed: [77854219-d87e-477a-82ab-e261619576d7, clickElement {id=4e40d93b-52fa-47b2-bf37-6c1742561f0e}]
#19
Отправлено 21 октября 2013 - 14:03
вам сказали именно логировать действия Селениума или просто сказали логировать?
Если бы вы были разработчиком Селениума, тогда всё верно.
Возможно вам нужно такое логирование
Тест кейс №18Б - Покупка
1. Открыть сайт - ОК
2. Залогиниться - ОК
3. Выбрать товар - ОК
4. Купить - failed
#20
Отправлено 22 октября 2013 - 05:41
читал тему и ничего не понял />
вам сказали именно логировать действия Селениума или просто сказали логировать?
Если бы вы были разработчиком Селениума, тогда всё верно.
Возможно вам нужно такое логирование
Тест кейс №18Б - Покупка
1. Открыть сайт - ОК
2. Залогиниться - ОК
3. Выбрать товар - ОК
4. Купить - failed
Такое логгирование будет возможно, если я каждый метод "Открыть сайт", "Залогиниться" и т.д. оберну try//catch ?
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных