Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ConciseAPI {
- private static final ThreadLocal<WebDriver> threadLocal = new ThreadLocal<WebDriver>();
- public static WebDriver getDriver() {
- return threadLocal.get();
- }
- public static void setDriver(WebDriver driver) {
- threadLocal.set(driver);
- }
- /*
- Отличный вариант)
- можно еще и так, этот вариант - попроще
- не меняй свой, разве что имя переменной threadLocal уточни
- */
- public class ConciseAPI {
- private static Map<Thread, WebDriver> drivers = new HashMap<Thread, WebDriver>();
- public static WebDriver getDriver() {
- return drivers.get(Thread.currentThread());
- }
- public static void setDriver(WebDriver driver) {
- drivers.put(Thread.currentThread(), driver);
- }
- ************************************************************************************************
- public static Actions actions() {
- Actions actions = new Actions(getDriver());
- return actions;
- }
- /*
- можно проще
- */
- return new Actions(getDriver());
- ****************************************************************************************************************
- /*
- в целом - ConciseAPI - уже отличный
- можно кое-что сделать более DRY
- но - и сейчас уже очень неплохо
- */
- *************************************************************************************************************
- public static ExpectedCondition<List<WebElement>> listNthElementHasText(final By elementsLocator, final int index, final String text) {
- ...
- if (actualText.contains(text)) {
- return elements;
- } else {
- return null;
- }
- /*
- вот этот кусочек - можно проще реализовать
- гугли ternary operator java
- return actualText.contains(text) ? elements : null
- в sizeOf - уже применял этот прием
- */
- ****************************************************************************************
- public static WebElement setValue(WebElement element, String task)
- /*
- в контексте этого метода - String task - мы должны оперировать уже терминами
- никак не связанными с терминами нашего тестируемого приложения
- String task - это просто value, text
- в данном случае
- мы с тобой уже это обсуждали по-моему)
- посмотри работы по Selenide - по GMail
- */
- *********************************************************************************************
- public class BaseTest {
- @Before
- public void WebDriver() {
- setDriver(new FirefoxDriver());
- }
- @AfterClass
- public static void closeBrowser() {
- getDriver().quit();
- }
- @After
- public void clearData() {
- executeJavascript("localStorage.clear()");
- }
- @Before
- public void openPage() {
- open("https://todomvc4tasj.herokuapp.com/");
- }
- }
- /*
- вот - причина - почему не закрываются все браузеры
- открываем браузер - перед каждым тест-методом - в @Before-методе
- а закрываем - после запусков ВСЕХ тестов в @AfterClass-методе
- тут - или-или
- если тесты выполняются в одном потоке - значит работай с @BeforeClass & @AfterClass
- а если потоков несколько - как у нас тут - то работай с @Before & @After
- сколько раз открыли - столько и закрыли
- еще - не навешивай на один класс - и работу с вебдрайвером
- и открытие урла с очисткой локалсториджа
- вспомни про Single Responsibility Principle
- вспомни работу по Reusing Test Setup
- посмотри в FAQ - раздел Reusing Test Setup
- и тут - разнеси на 2 предка тест-класса эти разные функциональности
- */
- ************************************************
- /*
- pom.xml - применяй реформатирование кода и тут
- */
- **************************************
- http://joxi.ru/n2YkKaGUoZj5jr
- /*
- иллюстрация для источника Null Pointer Exception
- посмотри на стрелочки - тоже в такой послеловательности проследи
- смотри - мы пытаемся добавить что-то в список actualClasses
- но этот список - этот объект - мы не инициализировали - actualClasses
- эта переменная - как раз и равна null
- посмотри на другие кондишены - как ты инициализируешь списки там
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement