Перейти к содержимому

Фотография

Замедление прохождения теста и подсвечивание элементов в Selenium WebD


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 21

#1 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 09 сентября 2015 - 09:53

Я с недавнего времени начал изучать автоматизированное тестерование, в данный момент занимаюсть выполнением автотестов в Eclipse Java. У  меня возникли некоторые трудности - тесты проходят слишком быстро и мне необходимо их замедлить. Нашел пример от Алексея Баранцева в теме http://software-test...-slow-highlight, но не могу его пример применить для своих тестов. Может кто сможет обяснить на примере? Спасибо.


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 09 сентября 2015 - 10:05

Вставляйте задержки 

Thread.sleep(1000L);  // секунда

 

Но думаю, вам лучше ознакомиться на форуме с таким понятием как ожидание.


  • 0

#3 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 09 сентября 2015 - 10:19

Я с недавнего времени начал изучать автоматизированное тестерование, в данный момент занимаюсть выполнением автотестов в Eclipse Java. У  меня возникли некоторые трудности - тесты проходят слишком быстро и мне необходимо их замедлить. Нашел пример от Алексея Баранцева в теме http://software-test...-slow-highlight, но не могу его пример применить для своих тестов. Может кто сможет обяснить на примере? Спасибо.

 

По вашей ссылке есть пример

это запуск драйвера

 WebDriver regularDriver = new FirefoxDriver();
        EventFiringWebDriver driver = new EventFiringWebDriver(regularDriver);
        driver.register(new ListenerThatWaitsBeforeAnyAction(5, TimeUnit.SECONDS));

Но вам нужен класс ListenerThatWaitsBeforeAnyAction

 

Создайте отдельный класс как в примере

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;

public class ListenerThatWaitsBeforeAnyAction extends AbstractWebDriverEventListener { 
	private final long timeout;

	public ListenerThatWaitsBeforeAnyAction(long timeout, TimeUnit unit) {
		this.timeout = TimeUnit.MILLISECONDS.convert(Math.max(0, timeout), unit);
	}

	public void beforeNavigateTo(String url, WebDriver driver) {
		sleep();
	}


	public void beforeNavigateBack(WebDriver driver) {
		sleep();
	}


	public void beforeNavigateForward(WebDriver driver) {
		sleep();
	}


	public void beforeClickOn(WebElement element, WebDriver driver) {
		sleep();
	}


	public void beforeChangeValueOf(WebElement element, WebDriver driver) {
		sleep();
	}


	public void beforeScript(String script, WebDriver driver) {
		sleep();
	}

	private void sleep() {
		try {
			Thread.sleep(timeout);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

Все, запускаете тесты и они у вас медленно проходят

 

Проверил только что у себя - работает


  • 2

#4 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 09 сентября 2015 - 11:25

Запускайте FireFox драйвером , а не Chrome. Будет помедленнее :wink:


  • 0

#5 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 09 сентября 2015 - 11:34

Запускайте FireFox драйвером , а не Chrome. Будет помедленнее :wink:

1. В том то и дело что нужно проверять на в нескольких браузерах

2. В форме регистрации есть ограничение по времени заполнения формы

3. Если проверять одним FF, то можно ограничится и Selenium IDE


  • 0

#6 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 09 сентября 2015 - 11:39

 

Я с недавнего времени начал изучать автоматизированное тестерование, в данный момент занимаюсть выполнением автотестов в Eclipse Java. У  меня возникли некоторые трудности - тесты проходят слишком быстро и мне необходимо их замедлить. Нашел пример от Алексея Баранцева в теме http://software-test...-slow-highlight, но не могу его пример применить для своих тестов. Может кто сможет обяснить на примере? Спасибо.

 

По вашей ссылке есть пример

это запуск драйвера

 WebDriver regularDriver = new FirefoxDriver();
        EventFiringWebDriver driver = new EventFiringWebDriver(regularDriver);
        driver.register(new ListenerThatWaitsBeforeAnyAction(5, TimeUnit.SECONDS));

Но вам нужен класс ListenerThatWaitsBeforeAnyAction

 

Создайте отдельный класс как в примере

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;

public class ListenerThatWaitsBeforeAnyAction extends AbstractWebDriverEventListener { 
	private final long timeout;

	public ListenerThatWaitsBeforeAnyAction(long timeout, TimeUnit unit) {
		this.timeout = TimeUnit.MILLISECONDS.convert(Math.max(0, timeout), unit);
	}

	public void beforeNavigateTo(String url, WebDriver driver) {
		sleep();
	}


	public void beforeNavigateBack(WebDriver driver) {
		sleep();
	}


	public void beforeNavigateForward(WebDriver driver) {
		sleep();
	}


	public void beforeClickOn(WebElement element, WebDriver driver) {
		sleep();
	}


	public void beforeChangeValueOf(WebElement element, WebDriver driver) {
		sleep();
	}


	public void beforeScript(String script, WebDriver driver) {
		sleep();
	}

	private void sleep() {
		try {
			Thread.sleep(timeout);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

Все, запускаете тесты и они у вас медленно проходят

 

Проверил только что у себя - работает

 

1. Драйвер нужно запускать в своем тесте?

2. Отдельный класс создавать в package с другими классами теста?

Сделал так , теперь у меня откывается окно браузера и и больше ничего не происходит


  • 0

#7 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 09 сентября 2015 - 11:43

1. Драйвер нужно запускать в своем тесте?

 

 

как у тебя сделано, я хз. Замени свою "условную строчку"

WebDriver driver= new FirefoxDriver();

 

На
      WebDriver regularDriver = new FirefoxDriver();
        EventFiringWebDriver driver = new EventFiringWebDriver(regularDriver);
        driver.register(new ListenerThatWaitsBeforeAnyAction(5, TimeUnit.SECONDS));

 

 

 

2. Отдельный класс создавать в package с другими классами теста?

 

Не важно, как тебе удобно

 

 

Сделал так , теперь у меня откывается окно браузера и и больше ничего не происходит

 

 

ошибки должны быть


  • 0

#8 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 09 сентября 2015 - 11:54

Если тесты выполняются быстро -- это хорошо.

 

И если при этом сбоит какая-то отдельная команда -- не стоит замедлять работу всех команд равномерно, нужно аккуратно добавить ожидание (или хотя бы просто паузу) в одно единственное место.

 

Пример с замедлением и подсветкой я делал вовсе не для преодоления нестабильности тестов. Просто иногда их удобно использовать вместо демонстрационных видеороликов. Согласитесь, когда работа приложения демонстрируется "вживую" -- это выглядит гораздо круче :)

 

Сейчас техника продвинулась вперёд, и уже не нужно использовать EventFiringWebDriver, есть более правильный способ -- использование WebDriverWrapper:

https://github.com/b...ingWrapper.java

 

1) Подключаете библиотеку webdriver-wrapper
http://search.maven....pper|1.0.47|jar

 

2) Инициализируете драйвер, оборачиваете его вот так:

WebDriver driver = new HighlightingWrapper(new FirefoxDriver());

и пользуетесь.

 

По умолчанию задержки 2 секунды, но можно это менять, смотрите разные конструкторы класса HighlightingWrapper.


  • 2
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 09 сентября 2015 - 13:07

 

 

как у тебя сделано, я хз. Замени свою "условную строчку"

Сделал вот так

package com.example.tests;
 
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
 
import org.junit.*;
 
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
 
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.support.ui.Select;
 
import addProvider.ListenerThatWaitsBeforeAnyAction;
 
public class ExampleForm {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();
 
  @Before
 public void setUp() throws Exception {
 WebDriver regularDriver = new FirefoxDriver();
      EventFiringWebDriver driver = new EventFiringWebDriver(regularDriver);
      driver.register(new ListenerThatWaitsBeforeAnyAction(5, TimeUnit.SECONDS));

  • 0

#10 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 09 сентября 2015 - 13:28

скинь весь проект, по частям ничего не понятно


  • 0

#11 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 сентября 2015 - 06:54

скинь весь проект, по частям ничего не понятно

package com.example.tests;
 
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
 
import org.junit.*;
 
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
 
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.support.ui.Select;
 
import addProvider.ListenerThatWaitsBeforeAnyAction;
 
public class ExampleForm {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();
private By pause;
 
  @Before
  public void setUp() throws Exception {
 WebDriver regularDriver = new FirefoxDriver();
      EventFiringWebDriver driver = new EventFiringWebDriver(regularDriver);
      driver.register(new ListenerThatWaitsBeforeAnyAction(5, TimeUnit.SECONDS));
  }
 
  @Test
  public void testExampleForm() throws Exception {
    driver.get(baseUrl + "/");
    driver.findElement(By.xpath("(//img[contains(@src,'https://res.cloudina...[2]")).click();
    driver.findElement(By.linkText("Learn More & Chiropractor Provider Application")).click();
    driver.findElement(By.cssSelector("button.mfp-close")).click();
    driver.findElement(By.cssSelector("div.bottom_save_btn.float_left")).click();
    driver.findElement(By.id("name")).clear();
    driver.findElement(By.id("name")).sendKeys("Weny");
    driver.findElement(By.id("surname")).clear();
    driver.findElement(By.id("surname")).sendKeys("Senty");
    driver.findElement(By.id("email")).clear();
    driver.findElement(By.id("email")).sendKeys("wen22.sent@mail.com");
    driver.findElement(By.id("totalProviders")).clear();
    driver.findElement(By.id("totalProviders")).sendKeys("2");
    driver.findElement(By.id("totalLocations")).clear();
    driver.findElement(By.id("totalLocations")).sendKeys("3");
    driver.findElement(By.linkText("Next")).click();
    driver.findElement(By.id("address")).clear();
    driver.findElement(By.id("address")).sendKeys("street 19th");
    driver.findElement(By.id("city")).clear();
    driver.findElement(By.id("city")).sendKeys("Minsk");
    new Select(driver.findElement(By.id("state"))).selectByVisibleText("Alabama");
    driver.findElement(By.id("zip")).clear();
    driver.findElement(By.id("zip")).sendKeys("270000");
    driver.findElement(By.linkText("Next")).click();
    driver.findElement(By.id("practiceYears")).clear();
    driver.findElement(By.id("practiceYears")).sendKeys("4");
    new Select(driver.findElement(By.id("serveAfterHours"))).selectByVisibleText("Yes");
    new Select(driver.findElement(By.id("fullSchedule"))).selectByVisibleText("No");
    driver.findElement(By.id("licenseNumber")).sendKeys("34343432");
    new Select(driver.findElement(By.id("licenseState"))).selectByVisibleText("Alabama");
    driver.findElement(By.linkText("Next")).click();
    driver.findElement(By.linkText("Finish")).click();
  }
 
  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }
 
  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }
 
  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }
 
  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}
 

  • 0

#12 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 сентября 2015 - 06:59

Если тесты выполняются быстро -- это хорошо.

 

И если при этом сбоит какая-то отдельная команда -- не стоит замедлять работу всех команд равномерно, нужно аккуратно добавить ожидание (или хотя бы просто паузу) в одно единственное место.

 

Пример с замедлением и подсветкой я делал вовсе не для преодоления нестабильности тестов. Просто иногда их удобно использовать вместо демонстрационных видеороликов. Согласитесь, когда работа приложения демонстрируется "вживую" -- это выглядит гораздо круче :)

 

Сейчас техника продвинулась вперёд, и уже не нужно использовать EventFiringWebDriver, есть более правильный способ -- использование WebDriverWrapper:

https://github.com/b...ingWrapper.java

 

1) Подключаете библиотеку webdriver-wrapper
http://search.maven....pper|1.0.47|jar

 

2) Инициализируете драйвер, оборачиваете его вот так:

WebDriver driver = new HighlightingWrapper(new FirefoxDriver());

и пользуетесь.

 

По умолчанию задержки 2 секунды, но можно это менять, смотрите разные конструкторы класса HighlightingWrapper.

Скажите, а этот драйвер WebDriverWrapper, он отвечает за замедление или подсветку?


  • 0

#13 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 10 сентября 2015 - 07:01

Ты baseUrl специально пустым оставил ? :)


  • 0

#14 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 сентября 2015 - 07:27

да


  • 0

#15 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 сентября 2015 - 07:28

Ты baseUrl специально пустым оставил ? :)

Я подставлял туда адрес сайта но, он все равно открывает окно браузера и тормозит


  • 0

#16 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 10 сентября 2015 - 07:48

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


  • 0

#17 Mityagin

Mityagin

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 сентября 2015 - 08:09

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

селениума ide стоит последняя версия 2.9.0

selenium standalone server 2.47.1 вроде тоже последняя


  • 0

#18 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 11 сентября 2015 - 13:45

Скажите, а этот драйвер WebDriverWrapper, он отвечает за замедление или подсветку?

 

HighlightingWrapper занимается и подветкой, и задержками.

Нет смысла подсвечивать без задержек -- всё равно ничего не успеваешь заметить :)


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#19 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 06 ноября 2015 - 08:25

Если тесты выполняются быстро -- это хорошо.
 
И если при этом сбоит какая-то отдельная команда -- не стоит замедлять работу всех команд равномерно, нужно аккуратно добавить ожидание (или хотя бы просто паузу) в одно единственное место.
 
Пример с замедлением и подсветкой я делал вовсе не для преодоления нестабильности тестов. Просто иногда их удобно использовать вместо демонстрационных видеороликов. Согласитесь, когда работа приложения демонстрируется "вживую" -- это выглядит гораздо круче :)
 
Сейчас техника продвинулась вперёд, и уже не нужно использовать EventFiringWebDriver, есть более правильный способ -- использование WebDriverWrapper:
https://github.com/b...ingWrapper.java
 
1) Подключаете библиотеку webdriver-wrapper
http://search.maven....pper|1.0.47|jar
 
2) Инициализируете драйвер, оборачиваете его вот так:

WebDriver driver = new HighlightingWrapper(new FirefoxDriver());
и пользуетесь.
 
По умолчанию задержки 2 секунды, но можно это менять, смотрите разные конструкторы класса HighlightingWrapper.

а для C# такой приятности нет?)
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#20 tshuvaev

tshuvaev

    Новый участник

  • Members
  • Pip
  • 53 сообщений
  • ФИО:Timur
  • Город:Москва

Отправлено 06 ноября 2015 - 09:11

Мне кажется тебе эта штука поможет - http://www.seleniumh...er_advanced.jsp


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных