Advertisement
julia_v_iluhina

Untitled

Jan 22nd, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.23 KB | None | 0 0
  1. public class ConciseAPI {
  2.  
  3.     private static final ThreadLocal<WebDriver> threadLocal = new ThreadLocal<WebDriver>();
  4.  
  5.     public static WebDriver getDriver() {
  6.         return threadLocal.get();
  7.     }
  8.  
  9.     public static void setDriver(WebDriver driver) {
  10.         threadLocal.set(driver);
  11.     }
  12. /*
  13.     Отличный вариант)
  14.  
  15.     можно еще и так, этот вариант - попроще
  16.     не меняй свой, разве что имя переменной threadLocal уточни
  17. */
  18.  
  19. public class ConciseAPI {
  20.  
  21.     private static Map<Thread, WebDriver> drivers = new HashMap<Thread, WebDriver>();
  22.  
  23.     public static WebDriver getDriver() {
  24.         return drivers.get(Thread.currentThread());
  25.     }
  26.  
  27.     public static void setDriver(WebDriver driver) {
  28.         drivers.put(Thread.currentThread(), driver);
  29.     }
  30. ************************************************************************************************
  31.     public static Actions actions() {
  32.         Actions actions = new Actions(getDriver());
  33.         return actions;
  34.     }
  35. /*
  36.     можно проще
  37. */
  38. return new Actions(getDriver());
  39. ****************************************************************************************************************
  40. /*
  41.     в целом - ConciseAPI - уже отличный
  42.  
  43.     можно кое-что сделать более DRY
  44.     но - и сейчас уже очень неплохо
  45. */
  46. *************************************************************************************************************
  47. public static ExpectedCondition<List<WebElement>> listNthElementHasText(final By elementsLocator, final int index, final String text) {
  48.  ...
  49.  
  50.                 if (actualText.contains(text)) {
  51.                     return elements;
  52.                 } else {
  53.                     return null;
  54.                 }
  55. /*
  56.     вот этот кусочек - можно проще реализовать
  57.     гугли ternary operator java
  58.  
  59.     return actualText.contains(text) ? elements : null
  60.  
  61.     в sizeOf - уже применял этот прием
  62. */
  63. ****************************************************************************************
  64. public static WebElement setValue(WebElement element, String task)
  65. /*
  66.     в контексте этого метода - String task - мы должны оперировать уже терминами
  67.     никак не связанными с терминами нашего тестируемого приложения
  68.  
  69.     String task - это просто value, text
  70.     в данном случае
  71.  
  72.     мы с тобой уже это обсуждали по-моему)
  73.     посмотри работы по Selenide - по GMail
  74. */
  75. *********************************************************************************************
  76. public class BaseTest {
  77.  
  78.     @Before
  79.     public void WebDriver() {
  80.         setDriver(new FirefoxDriver());
  81.     }
  82.  
  83.  
  84.     @AfterClass
  85.     public static void closeBrowser() {
  86.         getDriver().quit();
  87.     }
  88.  
  89.     @After
  90.     public  void clearData() {
  91.         executeJavascript("localStorage.clear()");
  92.     }
  93.  
  94.     @Before
  95.     public void openPage() {
  96.         open("https://todomvc4tasj.herokuapp.com/");
  97.     }
  98. }
  99. /*
  100.     вот - причина - почему не закрываются все браузеры
  101.  
  102.     открываем браузер - перед каждым тест-методом - в @Before-методе
  103.     а закрываем  - после запусков ВСЕХ тестов в  @AfterClass-методе
  104.  
  105.     тут - или-или
  106.  
  107.     если тесты выполняются в одном потоке - значит работай с  @BeforeClass & @AfterClass
  108.     а если потоков несколько - как у нас тут - то работай с @Before & @After
  109.  
  110.     сколько раз открыли - столько и закрыли
  111.  
  112.     еще - не навешивай на один класс - и работу с вебдрайвером
  113.     и открытие урла с очисткой локалсториджа
  114.     вспомни про Single Responsibility Principle
  115.  
  116.     вспомни работу по Reusing Test Setup
  117.     посмотри в FAQ - раздел Reusing Test Setup
  118.  
  119.     и тут - разнеси на 2 предка тест-класса эти разные функциональности
  120. */
  121. ************************************************
  122. /*
  123.     pom.xml - применяй реформатирование кода и тут
  124. */
  125. **************************************
  126. http://joxi.ru/n2YkKaGUoZj5jr
  127. /*
  128.     иллюстрация для источника Null Pointer Exception
  129.  
  130.     посмотри на стрелочки - тоже в такой послеловательности проследи
  131.  
  132.     смотри - мы пытаемся добавить что-то в список actualClasses
  133.     но этот список - этот объект - мы не инициализировали - actualClasses
  134.    
  135.     эта переменная - как раз и равна null
  136.    
  137.     посмотри на другие кондишены - как ты инициализируешь списки там
  138. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement