Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Texts extends CollectionCondition {
- List<String> actualTexts;
- String[] expectedTexts;
- /*
- лучше бы оспользовать модификаторы доступа
- https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
- цитата
- If a class has no modifier (the default, also known as package-private),
- it is visible only within its own package
- т е - не меняли ничего в классе
- и просто перенесли ExactTexts в другой пекедж - и будут в потомке - эти поля не доступны
- можно слету не разгадать)
- лучше все же более определенно эти моменты формулировать
- пробегись на этот счет по проекту вообще
- */
- *****************************
- public abstract class AbstractLazyCollection implements LazyCollection {
- ...
- public String identity() {
- return "collections";
- }
- /*
- логично - в рамках класса-коллекции - рассказать что это коллекция
- */
- ...
- public abstract class CollectionCondition extends AbstractCondition<List<WebElement>> {
- @Override
- public String identity() {
- return "element";
- }
- }
- /*
- и тут это повторяем...
- с вариациями, правда)
- но зачем - раз мы так красиво вмостили этот метод в AbstractLazyCollection?
- да еще и грамотно объявили на уровне LazyEntity
- */
- public abstract class AbstractCondition <V> implements Condition<V> {
- public LazyEntity <V> entity;
- ...
- public String toString() {
- return this.getClass().getSimpleName() + " for " + identity() + " found by: " + entity + "\n expected: " + expected() + "\n actual: " + actual();
- }
- /*
- просто тут вызовешь identity() у объекта entity
- и будет ок
- подправь это - и для лейзи элемента, и для лейзи-коллекции
- ну и для кондишенов)
- */
- ********************************************************
- public interface LazyElement extends LazyEntity <WebElement> {
- public WebElement shouldBe(Condition<WebElement> condition);
- public WebElement shouldHave(Condition<WebElement> condition);
- }
- /*
- старт верный )
- но где же
- click(), sendKeys(), clear()?
- http://joxi.ru/DmBNWL6FNeDdLm
- объяви тут эти методы
- и реализуй в AbstractLazyElement
- т к - любой элемент лейзи-семейства - должен уметь это делать
- вспомни - мы реализуя $(...)
- в прошлых работах - ждали видимости
- и затем - возвращали вебэлемент
- и потом - уже у него вызывали нужный нам метод (click(), sendKeys(), clear())
- и тут - также
- чтобы для нашего лейзи-элемента выполнить клик
- надо дождаться его видимости
- получить вебэлемент(есть у тебя getWrappedEntity())
- и уже у вебэлемента - вызвать соответствующий метод
- */
- *************************************************
- public class LazyWebDriverElement extends AbstractLazyElement
- public class LazyWebDriverCollection extends AbstractLazyCollection
- /*
- к реализации этих классов - вопросов нет
- */
- ****************************
- public class ConciseAPI {
- public static void doubleClick(WebElement element) {
- public static void hover(WebElement element) {
- public static WebElement setValue(WebElement element, String text) {
- public static <V> V assertThat(LazyEntity entity, Condition<V> condition, long timeout) {
- public static <V> V assertThat(LazyEntity entity, Condition<V> condition) {
- /*
- это - уже методы лейзи-элемента будут)
- отсюда это убирай
- */
- public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitElement) {
- return assertThat(entity, conditionToWaitElement);
- }
- /*
- а вот тут пусть метод возвращает результат типа LazyElement
- а параметр будем передавать - локатор. И все)
- и внутри метода - мы вернем новый LazyWebDriverElement
- т е в результате - мы получим лейзи-объект = рассказ, как искать вебэлемент
- и только тогда, когда у элемента будем вызывать методы
- вот там - будем сначала ждать, а потом делать
- выше было про реализацию этих методов
- */
- public static WebElement $(LazyEntity entity) {
- /*
- этот метод - уйдет
- */
- public static WebElement $(String cssSelector) {
- /*
- аналогично предыдущему методу - возвращай LazyElement
- */
- public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitParentElement, String innerElementCssSelector) {
- public static WebElement $(LazyEntity entity, Condition<WebElement> conditionToWaitParentElement, By innerElementLocator) {
- /*
- эти удаляй
- */
- /*
- аналогично - реализуй и метод $$
- */
- *****************************
- public class Gmail {
- public static By mails = byCss("[role=main] .zA");
- /*
- тут применяй
- LazyCollection mails = $$("[role=main] .zA");
- */
- ....
- /*
- что касается вызовов $(...).... - то внешний вид кода в пейдже - не изменится)
- а вот реализация - изменится)
- выше было про это)
- */
Advertisement
Add Comment
Please, Sign In to add comment