Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @BeforeClass
- public static void configure() {
- Configuration.timeout = 20;
- }
- /*
- ты уверена. что это тебе нужно?
- такой код есть в 2-ух тест-классах из 4-х
- если недостаточно таймаута - лучше в каждом тест-классе установи таймаут
- или еще одного предка тест-класса реализуй - с установленным нужным тебе таймаутом
- лучше отдельным классом - чтобы не портить универсальную реализацию BaseTest
- просто получишь иерархию
- BaseTest
- AtTodoMVCBaseTest
- TodoMVCTest
- */
- *******************************************
- public static ExpectedCondition<WebElement> elementHasText(final By elementsLocator, final String expectedText) {
- /*
- по аналогии с другими кондишенами - точнее будет listElementHasText
- для работы с todoMVC - логичнее было бы реализовать
- listElementHasExactText
- &
- exactTexts
- как ты помнишь - нам тут нужны проверки более точные - тексты сверяае не на вхождение, а на равенство
- */
- ...
- private String elementText;
- private String actualText;
- ...
- /*
- эти переменные не используются
- */
- ...
- WebElement element = elements.get(i);
- return element;
- /*
- можно переписать проще = return elements.get(i);
- */ ...
- public String toString() {
- return format("\n texts should contain: %s\n while actual text is %s\n list:%s ",
- expectedText, actualText, elementTexts);
- }
- /*
- сообщение странное
- тут нам надо сказать
- что список должен содержать элемент с таким-то текстом
- в то время как факт = вот такие тексты в списке элементов
- */
- ************************************************
- public static ExpectedCondition<WebElement> listElementHasClass(final By elementsLocator, final String cssClass) {
- ...
- private WebElement element;
- /*
- не используется
- */
- ....
- public String toString() {
- return format("\n element with class %s\n should exist. While actual classes are: %s ",
- cssClass, elementClasses);
- }
- /*
- здесь и вооще во всех кондишенах
- стоит строить фразу
- element of list located by ...
- list located by ...
- element located by ...
- т е - указать - про что речь - что проверяем и уточнить локатор (что тоже важно)
- should ...
- описываем expected
- while actual ...
- описываем actual
- */
- ****************************************
- public static ExpectedCondition<List<WebElement>> visibleTextsOf(final By elementsLocator, final String... expectedTexts) {
- /*
- корректнее назвать textsOfVisible
- а еще лучше = реализовать exactTextsOfVisible
- убери лишние комментарии в коде
- */
- ******************************************
- public static ExpectedCondition<Boolean> noVisibleElementsInList(final By elementsLocator)
- public static ExpectedCondition<Boolean> noElementsInList(final By elementsLocator) {
- /*
- достаточно было бы реализовать sizeOfVisible
- по аналогии с sizeOf
- это в большем количестве случаев пригодится
- а если хочется реализовать аналог empty
- то можно было бы дореализовать такую пару
- */
- public static ExpectedCondition<List<WebElement>> listIsEmpty(final By elementsLocator) {
- return sizeOf(elementsLocator, 0);
- }
- public static ExpectedCondition<List<WebElement>> listOfVisibleIsEmpty(final By elementsLocator) {
- return sizeOfVisible(elementsLocator, 0);
- }
- ****************************************
- //метод ниже падает
- // public static List<String> getTextsOfVisibleElements(final List<WebElement> elements) {
- ...
- /*
- а тебе такой метод и не нужен
- у тебя чедусных 2 метода есть
- getVisibleElements - получила видимые элементы
- getTexts - а теперь получила тесты
- или просто
- getTexts - получила тексты всех элементов
- не надо ничего другого реализовывать
- */
- *********************************************
- public static <T> T executeJavaScript(String jsCode, Object... arguments) {
- return (T) ((JavascriptExecutor) getDriver()).executeScript(jsCode, arguments);
- }
- /*
- не поняла - зачем тебе тут использование дженериов
- мы не используем результат, который возвращает executeScript
- из этих соображений можно наш метод реализовать как
- public static void executeJavaScript(String jsCode, Object... arguments)
- если есть желание вернуть то же, что и executeScript
- то тогда посмотри - что возвращает этот метод
- и используй єти знания
- место этого метода - в ConciseAPI
- метод универсальный
- и тоже - обеспечивает нам более простую работу с селениумом
- */
- *********************************************************
- getDriver().findElement(cssSelector("#new-todo")).sendKeys(tasksText + Keys.ENTER);
- /*
- в ConciseAPI реализуй метод
- WebElement setValue(WebElement element, String text)
- и тут сможешь переписать код
- setValue($("#new-todo"), tasksText + Keys.ENTER)
- согласись, код будет поприятнее)
- */
- ************************************************
- public static void hover(WebElement element) {
- Actions actions = new Actions(getDriver());
- actions.moveToElement(element).build().perform();
- }
- /*
- build().perform() vs perform()
- http://stackoverflow.com/questions/29071144/wbdriver-actions-build-perform
- http://stackoverflow.com/questions/16435798/webdriver-actions-perform-or-actions-build-perform
- http://www.ufthelp.com/2014/11/working-with-action-class-in-selenium.html
- */
- *******************************************************
- assertThat(elementHasText(tasks, oldTaskText))).findElement(byCss("label"))
- /*
- в ConciseAPI реализуй метод
- WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector)
- который
- выполнит проверку assertThat(conditionToWaitParentElement)
- и от ее результата - вебэлемента
- получит его внутренний элемент по селектору innerElementCssSelector
- фактически - твой код - достаточно просто формализовать
- метод практически написан
- и тогда ты сможешь методу doubleClick
- передать параметр $( elementHasText(tasks, oldTaskText), byCss("label") )
- elementHasText(tasks, oldTaskText) - дождались и получили элемент списка с таким текстом
- а потом у этого элемента получили внутренний элемент .findElement(byCss("label")
- и уже этот элемент - вернули
- когда реализуешь такое метод
- попробуй реализовать и вариант
- WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, By innerElementLocator)
- такой вариант будет более унивенсальным
- понимаешь, почему?
- аналогично - упростится вторая часть startEdit
- там где нужно установить новій текст для таски
- этот же метод
- WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector)
- позволит получить таску в режиме редактирования
- правда, кондишен нужен другой
- и у такой таски - получить внутренний элемент .edit
- и вот для так полученного вебэлемента - уже и вызовешь setValue
- а поскольку setValue возвращает тот же вебэлемент, с которым мы работали
- то ты в startEdit сможешь вернуть setValue(....)
- */
- *****************************
- public static void clickOutSide() {
- $("#footer").click();
- }
- /*
- а это я недосмотрела еще в селенидовской версии)
- во-первых - не стоило выделять это действие в отдельный метод
- т к оно нужно только для реализации ConfirmEditByClickOutside
- правильнее - как раз реализовать
- ConfirmEditByClickOutside
- в котором будет вызов
- startEdit + клик на чем-то вне редактируемой таски
- так ты получишь более KISS вариант
- не разделяй на 2 метода то, что используется только вместе и только в определенной последовательности
- на чем лучше кликать
- ты права - что лучше кликать на таком элементе, по клику на который ничего,
- кроме смены фокуса, не происходит
- $("#footer") - один из таких вариантов
- но есть вариант и получше
- кликать на чем-то, что уже используется
- например на $("#new-todo")
- так мы уменьшим количество независимых селекторов
- а так - получишь более DRY
- */
- ********************************
- ppublic static void delete(String taskText) {
- /*
- и тут используй методы
- в первой строке -
- WebElement $(ExpectedCondition<WebElement> conditionToWaitElement)
- (похож на выше разъясненный, только внутренний элемент не ищем)
- во второй строке
- WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector)
- */
- ***********************************
- public static void toggle(String taskText) {
- /*
- и тут примени
- WebElement $(ExpectedCondition<WebElement> conditionToWaitParentElement, String innerElementCssSelector)
- */
- *********************************************
- public static void refresh() {
- /*
- более универсально это делать
- getDriver().navigate().refresh();
- http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html
- http://nadimsaker.blogspot.com/2014/09/how-to-refresh-or-reload-page-in.html
- как думаешь - где расположить такой универсальный метод ?
- */
Advertisement
Add Comment
Please, Sign In to add comment