julia_v_iluhina

Untitled

Jan 13th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.88 KB | None | 0 0
  1.     public WebElement $(String cssSelector) {
  2.         return assertThat(visibilityOfElementLocated(By.cssSelector(cssSelector)));
  3.     }
  4. /*
  5.     я бы в реализации - заюзала
  6.     return $(By.cssSelector(cssSelector));
  7.  
  8.     не сказать - что мега важно
  9.     но - проще)
  10.     и более DRY
  11.  
  12.     советую
  13. */
  14. *********************
  15. public class CustomConditions {
  16.  
  17.     private static String actualText;
  18.  
  19.     public static ExpectedCondition<WebElement> nthProxyElementHasText(final By locator
  20.             , final int index
  21.             , final String expectedText) {
  22.  
  23.         return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
  24.  
  25.             private WebElement element;
  26.  
  27.             public WebElement apply(WebDriver driver) {
  28.                 ...
  29.                 actualText = element.getText();
  30.                 ....
  31.             }
  32.  
  33.             public String toString() {
  34.                 ....
  35.                         actualText
  36.             }
  37. /*
  38.     Отличная грубая ошибка)
  39.     запомни ее и никогда так не делай
  40.  
  41.     в CustomConditions - реализован кондишен nthProxyElementHasText
  42.     которы по сути - метод, возвращающий новый объект ExpectedCondition<WebElement>
  43.     в рамках которого мы реализуем проверку
  44.     и оперируем в проверке actualText-ом
  45.     т е - по сути - это собственность объекта-кондишена
  46.  
  47.     но никак не класса CustomConditions в целом
  48.  
  49.     это как иметь общий кошелек на жильцов всего подъезда)
  50.     я бы не согласилась)
  51.  
  52.     каких глюков можно наловить с помощью таких ошибок
  53.  
  54.     пример
  55.     используем этот actualText в паре кондишенов
  56.     или в одном кондишене,
  57.     но тесты запускаем параллельно
  58.  
  59.     если будут выполлняться проверки для нескольких таких объектов-кондишенов
  60.     и одна из проверок упадет - не факт - что в описании ошибки будет все ок)
  61.     а еще будет прикольно
  62.     если
  63.     в одной проверке - мы выполнили actualText = element.getText();
  64.     затем - по времени - в другой проверке успел выполниться actualText = element.getText();
  65.     и только потом в первой дошел ход до анализа actualText
  66.     то получим бред)
  67.     причем - странно и не стабильно проявляющийся бред
  68.     понять по проявлениям - что не так и как это пофиксить - поверь, будет не просто)
  69.  
  70.     потому
  71.         объявляй переменные - ровно там где нужно
  72.         не стремись вынести их повыше по структуре
  73.  
  74.         если что-то нужно на уровне метода - объявляй в методе
  75.         если что-то - на уровне класса - объявляй в этом классе, а не где-то выше по структуре
  76.  
  77.         конечно - при таких рассуждениях - учитывай не только сиюминутные обстоятельства)
  78.         например, объявлять пейджа - все же лучше на уровне тест-класса
  79.         а не в тест-методе, даже если он единственный
  80.         т к пейдж - все же собственность и инструмент для всего тест-класса в целом
  81.         да и тест-класс - потенциально может развиться
  82.  
  83.         но стремиться выпихивать что-то максимально высоко / глубоко - не, не стоит)
  84.  
  85.         особенно - когда вот мы оперировали объектом
  86.         и тут бац - свойства объекта выносим на уровень свойств класса,
  87.         причем не класса объекта, а объемлющего класса
  88.  
  89.         вопрос важный
  90.         надо хорошо осознавать - почему или для чего переменную вынес туда-то
  91.         ответ всегда должен быть)
  92.  
  93. */
  94. *********************
  95. nthProxyElementHasText
  96. /*
  97.     уже никаких Proxy у нас нету
  98.  
  99.     проверь код
  100. */
Advertisement
Add Comment
Please, Sign In to add comment