Повторное использование сеанса браузера Java Selenium
Мой вопрос заключается в следующем: как я могу повторно использовать сеанс браузера для тестов, которые находятся в разных классах java? У меня браузер открыт вот так:
public class OpenBrowser {
public static WebDriver driver;
@BeforeSuite
public static void openb() {
// Create a new instance of the Firefox driver
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
}
Затем я должен войти на сайт, используя некоторые учетные данные, и после того, как он зарегистрирован, я хочу выполнить другие тесты, я не хочу входить в систему для каждого теста, потому что их много, которые мне нужно сделать, и вход в систему для каждого займет десятилетие. Например, поток выглядит так: войти- > нажать какой-то компонент - >добавить какой-то компонент значения - > создать отчет. После этого я хотел бы сгенерировать другой отчет по другому компоненту, но когда я пытаюсь, он дает исключение null-указателя. Есть идеи? :)
3 ответа:
В
Selenium 2
с WebDriver вы можете вызватьdriver = new FirefoxDriver();
Который порождает браузер, и этот браузер будет оставаться открытым в течение всего времени вашего тестирования,
Или вы можете закрыть его с помощью
driver.Quit()
.Собственно, что я хочу делать?
Мне нравится закрывать окно браузера между тестами, чтобы я знал, что мои тесты не являются "грязными" с сохраненными данными сеанса, которые могут повлиять на выполнение тестов, но я могу видеть значение в некоторых целевых тестах, где я хочу попробовать пара различных сценариев при сохранении одного и того же сеанса.
Для уровня кода: Вы можете проверить, является ли он нулевым или нет. Если null, то вызовите браузер, чтобы дать другой.
/** * Driver for web application. * * @return driver Browser * @throws IOException */ public WebDriver getDriverBrowser() throws IOException { if (driverBrowser == null) { String sBrowser = PropertyLoader.loadProperty("browser"); driverBrowser = getBrowser(sBrowser); driverBrowser .manage() .timeouts() .implicitlyWait( Integer.valueOf(PropertyLoader .loadProperty("implicit_timeout_sec")), TimeUnit.SECONDS); driverBrowser.manage().window().maximize(); } return driverBrowser; }
Или вы можете использовать конфигурацию xml для использования некоторых тестовых случаев в качестве класса или конкретного теста.Используя TestNG, вы можете указать, какие тесты вы хотите запустить (
TestNG will generate an XML file of all of the tests that fail, so when you run it, it will only execute the failed tests)
.Проблема-1: я имею в виду, что я не хочу снова входить в систему, чтобы продолжить тестирование , я не возражаю если он открывает другое окно, то фактически как ты сказал, что так надежнее, но ... не поможет, если мне придется снова войти в систему.
Если вы не хотите входить в систему, то в каждом тестовом случае вам нужна базовая отправная точка. После завершения любого тестового случая он перейдет в базовое положение, и следующий тестовый случай начнется с базы
Это зависит от вас. Сначала вы должны проанализировать тестовые случаи, а затем выбрать, какая точка может быть отправной точкой для всех или набора некоторых тестовых случаев. Тогда ты сможешь это сделать.Вопрос-2: Как я могу реализовать базовую отправную точку?
Подробнее:
Один из простых способов, который я недавно выяснил, состоит в том, чтобы сделать webdriver статическим в классе и повторно использовать тот же webdriver в любом другом тестовом случае
Например в testcase1:
public class globallogin { static WebDriver driver = new ChromeDriver(); }
Теперь вы можете вызвать тот же webdriver в тестовом примере 2 как:
public class skucategory { static globallogin login = new globallogin(); public static void main(String[] args) { login.driver.get(<URL>); } }
Вы должны проверить с помощью qmetry Automation framework он обеспечивает управление драйверами через TestBase. Вам не нужно создавать экземпляр драйвера, просто настройте в свойстве или файле конфигурации xml и используйте драйвер в любом классе с помощью вызова getDriver ().
WebDriver driver = WebDriverTestBase.getDriver();
Он также имеет различные концепции дизайна, такие как тестовая страница, тестовый шаг, DataBean, хранилище локаторов , тестирование на основе данных слушатели и многое другое.
Для настройки драйвера можно задать свойство
driver.name
вне кода с именем драйвера, например
driver.name=firefoxDriver
Если вы хотите работать на нескольких браузерах параллельно, вы можете предоставить драйвер в файле конфигурации xml, например:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="QAF-Gherkin-Demo" verbose="0" parallel="methods" thread-count="10"> <test name="Run_on_FF"> <parameter name="driver.name" value="firefoxDriver"/> <packages> <package name="my.pkg"/> </packages> </test> <test name="Run_on_chrome"> <parameter name="driver.name" value="chromeDriver"/> <packages> <package name="my.pkg"/> </packages> </test> </suite>
В приведенном выше примере он будет выполнять все тесты в
my.pkg
параллельно в двух разных браузерах. вам не нужно создавать или совсем драйвер объекта в ваш код.Он также имеет механизм для повторной попытки, если создание драйвера не удается, что весьма полезно, когда вы запускаете тест в облаке.