Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://joxi.ru/gmvqJvkHLqgVxr
- /*
- примени getTexts
- */
- ***********************************
- public static ExpectedCondition<WebElement> conditionToWaitParentElement(final By locator, final String text) {
- /*
- зачем этот кондишен?
- */
- *********************************************
- public static ExpectedCondition<List<WebElement>> exactTextsOf(final By elementsLocator, final String... texts) {
- if (texts.length == 0) {
- throw new IllegalArgumentException("Array of expected texts is empty.");
- }
- return elementExceptionsCatcher(new ExpectedCondition<List<WebElement>>() {
- List<String> actualTexts;
- public List<WebElement> apply(WebDriver driver) {
- actualTexts = new ArrayList<String>();
- /*
- ниже - есть вызов actualTexts = getTexts(elements);
- в методе getTexts - инициализация списка тоже происходит
- так что убирай эту строку - actualTexts = new ArrayList<String>();
- */
- List<WebElement> elements = driver.findElements(elementsLocator);
- actualTexts = getTexts(elements);
- *******************************************************************************
- public static ExpectedCondition<List<WebElement>> exactTextsOfVisible(final By elementsLocator, final String... texts) {
- if (texts.length == 0) {
- throw new IllegalArgumentException("Array of expected texts is empty.");
- }
- return elementExceptionsCatcher(new ExpectedCondition<List<WebElement>>() {
- List<String> actualTexts;
- public List<WebElement> apply(WebDriver driver) {
- List<WebElement> elements = driver.findElements(elementsLocator);
- List<WebElement> visibleElements = getVisibleElements(elements);
- actualTexts = getTexts(visibleElements);
- /*
- отличное начало)
- а вот дальше - зачем после того как тексты получили
- заново добавляем тексты элементов в список?
- цикл ниже - явно лишний теперь
- ведь это и так делается в getTexts
- */
- for (WebElement element : visibleElements) {
- actualTexts.add(element.getText());
- }
- ....
- public String toString() {
- return "texts of list located" + elementsLocator + "\n should equals : " + Arrays.toString(texts) + "\n actual texts are " + actualTexts;
- }
- /*
- в toString() уточни - про фильтрацию по visible
- texts of visible elements of list located ...
- */
- *****************************************************************
- public static ExpectedCondition<List<WebElement>> sizeOf(final By elementsLocator, final int expectedSize) {
- ....
- public String toString() {
- return String.format("\nsize of list should be equals", expectedSize, "%s\n while actual size is: %s\n", listSize);
- }
- /*
- что написано в toString() кондишена - это важно
- это то - что ты увидишь в случае ошибки
- эта фраза должна быть точной, полезной и не сложной
- не сложной она будет - если ты будешь всегда одной схемы придерживаться
- я не перестану про это напоминать)
- Size of list located ...
- should be ...
- while actual size is ...
- */
- ***************************************
- public static ExpectedCondition<List<WebElement>> sizeOfVisible(final By elementsLocator, final int expectedSize) {
- return new ExpectedCondition<List<WebElement>>() {
- private int listSize;
- private List<WebElement> elements;
- public List<WebElement> apply(WebDriver driver) {
- elements = driver.findElements(elementsLocator);
- for (WebElement element : elements) {
- if (element.isDisplayed()) {
- return elements;
- }
- }
- /*
- читай код выше
- что мы делаем
- получили элементы списка
- начали их обходить
- и если элемент видим - то все ок
- кондишен прошел
- вопрос - мы вообще что собирались проверять?
- у нас цель - проверить что видимых элементов в списке = столько-то
- значит
- надо сначала - получить список видимых элементов
- и потом у него проверять размер
- */
- for (WebElement element : elements) {
- if (listSize == elements.size()) {
- return elements;
- }
- }
- /*
- вопрос - а надо нам обходить список в цикле
- чтоб его размер проверить?
- посмотри на уже отлаженный кондишен sizeOf
- с ним все ок
- */
- *************************************
- public static ExpectedCondition<WebElement> elementWithCssClass(final By elementsLocator, final String cssClass) {
- return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
- List<String> actualClasses;
- public WebElement apply(WebDriver driver) {
- List<WebElement> elements = driver.findElements(elementsLocator);
- for (WebElement element : elements) {
- actualClasses.add(element.getAttribute("class"));
- actualClasses = new ArrayList<String>();
- /*
- сначала = добавил новую строку в список actualClasses
- а потом - заново инициализировал actualClasses
- для чего делать actualClasses = new ArrayList<String>();?
- actualClasses.add(element.getAttribute("class")); - это ок
- только перед циклом - нужно инициализировать этот список
- */
- for (java.lang.String String : actualClasses) {
- /*
- в данный момент - список actualClasses - пуст
- из-за предыдущей строки
- упрости код
- первый цикл
- обходишь вписок элементов
- и собираешь actualClasses = список строк = значений атрибута "class"
- следующий цикл (не вложенный, просто следующий)
- */
- for (int i = 0; i < actualClasses.size(); i++) {
- //обходишь список actualClasses
- //и внутри цикла - разбираешь строку на слова и ее анализируешь
- String actualClass = actualClasses.get(i); //получили то что у i-го элемента в атрибуте class
- String[] actualCssClasses = actualClass.split("\\s"); //разобрали на массив слов это
- for(int j = 0; j < actualCssClasses.length; j++) { //обходим этот массив слов
- if (cssClass.equals(actualCssClasses[j])) { //и если нашли класс = переданному в кондишен классу
- return elements.get(i); //то знач - i-ый вебэлемент - нам подходит, возвращаем его
- }
- }
- }
- return null; //а если оббежали весь список actualClasses и не нашли ничего подходящего
- //значит нет такого элемента в списке - с нужным нам классом
- //вот нулл и возвращаем
- */
- ******************************************************
- /*
- сравни предложенный код с твоим
- обрати внимание на работу с методом split
- вариант actualClass.split(" "); - тоже рабочий должен быть
- отлаживай код
- на уровне работы с кондишенами - это уже необходимо
- как писала ранее
- работа с кондишеном считается законченной если
- в заведомо верной ситуации - проверка кондишена проходит
- в заведомо неверной ситуации - проверка кондишена не проходит и сообщение об ошибке - верное
- */
- ****************************************************
- public static ExpectedCondition<WebElement> elementWithText(final By elementsLocator, final String exactText) {
- return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
- List<String> actualTexts;
- private int index;
- public WebElement apply(WebDriver driver) {
- actualTexts = new ArrayList<String>();
- /*
- читаем код
- инициализировал список строк
- */
- List<WebElement> elements = driver.findElements(elementsLocator);
- /*
- получил список вебэлементов
- */
- for (WebElement element : elements) {
- /*
- обходишь список вебэлементов
- */
- getTexts(elements);
- /*
- и на каждой итерации этого цикла
- получаешь все тексты элементов
- причем - результат этого метода не присваиваешь никакой переменной
- например для списка в 10 элементов
- 10 раз будут получены тексты этих 10 элементов
- но результатами этой работы - мы не воспользовались ни разу
- */
- if (actualTexts.equals(exactText)) {
- /*
- в таком случае - actualTexts - всегда пустой список
- ведь мы его не наполнили
- и даже если бы наполнили
- то сравнивали бы - список actualTexts и строку exactText
- это не может быть равно друг другу ну никак
- */
- ...
- /*
- а что нам нужно сделать
- */
- List<WebElement> elements = driver.findElements(elementsLocator); //получили список вебэлементов
- actualTexts = getTexts(elements); //получили их тексты
- for(int i = 0; i < actualTexts.size(); i++) { //обходим тексты элементов
- if (actualTexts.get(i).equals(exactText)) { //если текст i-го элемента равен exactText
- return elements.get(i); //то возвращаем этот i-ый элемент
- }
- }
- return null; //а если обошли все тексты и не нашли соответствующий - значит подходящего элемента нет и возвращаем нулл
- ***************************************************************
- public String toString() {
- return "List of elements located" + elementsLocator + "\n should have exact text : " + exactText + "\n while actual texts are " + actualTexts;
- }
- /*
- should have element with exact text
- */
Advertisement
Add Comment
Please, Sign In to add comment