julia_v_iluhina

Untitled

Oct 1st, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.28 KB | None | 0 0
  1. public class Texts extends CollectionCondition {
  2.  
  3.     List<String> actualTexts;
  4.     String[] expectedTexts;
  5. /*
  6.     лучше бы оспользовать модификаторы доступа
  7.  
  8.     https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
  9.  
  10.     цитата
  11.      If a class has no modifier (the default, also known as package-private),
  12.      it is visible only within its own package
  13.  
  14.     т е - не меняли ничего в классе
  15.     и просто перенесли ExactTexts в другой пекедж - и будут в потомке - эти поля не доступны
  16.     можно слету не разгадать)
  17.  
  18.     лучше все же более определенно эти моменты формулировать
  19.  
  20.     пробегись на этот счет по проекту вообще
  21. */
  22. *****************************
  23. public abstract class AbstractLazyCollection implements LazyCollection {
  24.  
  25. ...
  26.     public String identity() {
  27.         return "collections";
  28.     }
  29. /*
  30.     логично - в рамках класса-коллекции - рассказать что это коллекция
  31. */
  32.  
  33. ...
  34.  
  35. public abstract class CollectionCondition extends AbstractCondition<List<WebElement>> {
  36.  
  37.     @Override
  38.     public String identity() {
  39.         return "element";
  40.     }
  41.  
  42. }
  43. /*
  44.     и тут это повторяем...
  45.     с вариациями, правда)
  46.  
  47.     но зачем - раз мы так красиво вмостили этот метод в AbstractLazyCollection?
  48.     да еще и грамотно объявили на уровне LazyEntity
  49. */
  50. public abstract class AbstractCondition <V> implements Condition<V> {
  51.  
  52.     public LazyEntity <V> entity;
  53.  
  54.   ...
  55.  
  56.     public String toString() {
  57.         return this.getClass().getSimpleName() + " for " + identity() + " found by: " + entity + "\n expected: " + expected() + "\n actual: " + actual();
  58.     }
  59. /*
  60.     просто тут вызовешь identity() у объекта entity
  61.     и будет ок
  62.  
  63.     подправь это - и для лейзи элемента, и для лейзи-коллекции
  64.     ну и для кондишенов)
  65. */
  66. ********************************************************
  67. public interface LazyElement extends LazyEntity <WebElement> {
  68.  
  69.     public WebElement shouldBe(Condition<WebElement> condition);
  70.  
  71.     public WebElement shouldHave(Condition<WebElement> condition);
  72. }
  73. /*
  74.     старт верный )
  75.     но где же
  76.     click(), sendKeys(), clear()?
  77.     http://joxi.ru/DmBNWL6FNeDdLm
  78.  
  79.     объяви тут эти методы
  80.     и реализуй в AbstractLazyElement
  81.     т к - любой элемент лейзи-семейства - должен уметь это делать
  82.  
  83.     вспомни - мы реализуя $(...)
  84.     в прошлых работах - ждали видимости
  85.     и затем - возвращали вебэлемент
  86.  
  87.     и потом - уже у него вызывали нужный нам метод (click(),  sendKeys(), clear())
  88.  
  89.     и тут - также
  90.  
  91.     чтобы для нашего лейзи-элемента выполнить клик
  92.         надо дождаться его видимости
  93.         получить вебэлемент(есть у тебя getWrappedEntity())
  94.         и уже у вебэлемента - вызвать соответствующий метод
  95. */
  96. *************************************************
  97. public class LazyWebDriverElement extends AbstractLazyElement
  98. public class LazyWebDriverCollection extends AbstractLazyCollection
  99. /*
  100.     к реализации этих классов - вопросов нет
  101. */
  102. ****************************
  103. public class ConciseAPI {
  104.  
  105.     public static void doubleClick(WebElement element) {
  106.     public static void hover(WebElement element) {
  107.     public static WebElement setValue(WebElement element, String text) {
  108.     public static <V> V assertThat(LazyEntity entity, Condition<V> condition, long timeout) {
  109.     public static <V> V assertThat(LazyEntity entity, Condition<V> condition) {
  110. /*
  111.     это - уже методы лейзи-элемента будут)
  112.     отсюда это убирай
  113. */
  114.  
  115.  
  116.     public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitElement) {
  117.         return assertThat(entity, conditionToWaitElement);
  118.     }
  119.     /*
  120.         а вот тут  пусть метод возвращает результат типа LazyElement
  121.         а параметр будем передавать - локатор. И все)
  122.  
  123.         и внутри метода - мы вернем новый LazyWebDriverElement
  124.  
  125.         т е в результате - мы получим лейзи-объект = рассказ, как искать вебэлемент
  126.  
  127.         и только тогда, когда у элемента будем вызывать методы
  128.         вот там - будем сначала ждать, а потом делать
  129.         выше было про реализацию этих методов
  130.  
  131.     */
  132.  
  133.     public static WebElement $(LazyEntity entity) {
  134.     /*
  135.         этот метод - уйдет
  136.     */
  137.  
  138.     public static WebElement $(String cssSelector) {
  139.     /*
  140.         аналогично предыдущему методу - возвращай LazyElement
  141.     */
  142.  
  143.  
  144.     public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
  145.     public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitParentElement, By innerElementLocator) {
  146.     /*
  147.         эти удаляй
  148.     */
  149.  
  150.     /*
  151.         аналогично - реализуй и метод $$
  152.     */
  153. *****************************
  154.  
  155. public class Gmail {
  156.  
  157.     public static By mails = byCss("[role=main] .zA");
  158.     /*
  159.         тут применяй
  160.         LazyCollection mails = $$("[role=main] .zA");
  161.     */
  162.    ....
  163.  
  164. /*
  165.     что касается вызовов $(...).... - то внешний вид кода в пейдже - не изменится)
  166.     а вот реализация - изменится)
  167.     выше было про это)
  168. */
Advertisement
Add Comment
Please, Sign In to add comment