Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.vovk.app;
- import static com.codeborne.selenide.CollectionCondition.*;
- import com.codeborne.selenide.*;
- import org.openqa.selenium.By;
- import org.openqa.selenium.JavascriptExecutor;
- import org.openqa.selenium.interactions.ActionChainExecutor;
- import org.openqa.selenium.interactions.Actions;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.junit.*;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.chrome.ChromeDriver;
- import org.openqa.selenium.firefox.FirefoxDriver;
- import org.openqa.selenium.firefox.MarionetteDriver;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import static com.codeborne.selenide.CollectionCondition.empty;
- import static com.codeborne.selenide.Condition.*;
- import static com.codeborne.selenide.Configuration.browser;
- import static com.codeborne.selenide.Selenide.*;
- import static com.codeborne.selenide.WebDriverRunner.*;
- import java.util.concurrent.TimeUnit;
- import com.codeborne.selenide.junit.ScreenShooter;
- /**
- * Created by Volodymyr on 11.02.2017.
- */
- public class TodoMvcFlowTest {
- // сдесь в имени слово Flow лишнее.. у нас только один тест класс - то есть достаточно что бы имя было общим...
- // просто ТестиДляТудуЕмвісі то есть TodoMvcTest
- private static Logger logger = LoggerFactory.getLogger( TodoMvcFlowTest.class );
- /* тас, по логу вопросы видел в письме.
- Отвечать не буду :)
- Потому что это никому не нужно :) Особенно в этой домашке.
- Какой Лог? ты что? зачем?
- */
- @Rule
- public ScreenShooter makeScreenshotOnFailure = ScreenShooter.failedTests().succeededTests();
- /*
- а это что такое?
- Селениде и так на всех фейлах своих делает скриншоты АВТОМАТИЧЕСКИ.
- */
- @BeforeClass
- public static void setUp(){
- // issue # - for FirefoxDriver - Geko
- // JavaScript warning: https://todomvc4tasj.herokuapp.com/bower_components/requirejs/require.js, line 15: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
- System.setProperty("webdriver.chrome.driver", "D:\\!QA\\chromedriver.exe");
- // вообще то достаточно должно быть прописать путь к хромдрайверу в переменную PATH
- // в винде, только перегрузить ее потом надо скорее всего...
- browser = "chrome";
- // Это плохо... принято писать так: Configuration.browser
- // в этом случае что бы было понятно что это за браузер такой - что это именно относится к конфигурейшену...
- WebDriver driver = new ChromeDriver();
- driver.get("https://todomvc4tasj.herokuapp.com"); // driver.get("https://google.com");
- driver.manage().window().maximize();
- driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
- setWebDriver(driver);
- // что вообще такое все эти строки? Селениде для того и был создан что бы всю эту лобуду не писать
- // селениде сам создает драйвер, достаточно указать какой: Configuration.browser = "chrome"
- // селениде сам делает maximize
- // селениде сам умеет неявно ждать, если таймауте не хватает - ставишь его вот тут: Configuration.timeout = ...
- // но зачем такой длинный таймаут? у тебя что комп 90тых годов?
- // если у тебя тест не проходит в хроме - потому что задачи не создаются - там по другому ждать нужно
- // нужно ждать догрузки джаваскрипта, но это другой вопрос, и он актуальный только если у тебя оно реально не работает...
- Configuration.reportsFolder = "test-result/reports";
- }
- @Test
- public void regularFlow() throws Exception { // какой эксепшен???? зачем???
- // сдесь не хватает cлова tasks в имени... а то не ясно чего флоу... ну хотя может это уже на любителя...
- ElementsCollection tasks = null; /// ???? что ЭТООООО какой нулл???? зачем????
- logger.debug("Just test message"); //такс, это выкинуть нафиг с глаз долой :)
- screenshot("1. start"); // нафиг. скриншоты и так делаются автоматически когда происходит ошибка, а больше они нигде и НЕ НУЖНЫ!!!!!
- // 1 create task1
- // зачем этот комментарий? - разве из кода не потяно и так что мы new todo set value делаем и соответственно задачу создаем?
- // запомни - комментарии это зло. Потому что их сложно поддерживать. все постоянно забывают поменять комментарий когда поменяют код.
- // и потом, люди раслабляются и пишут кривой код только по тому что думают комментарий все спасет
- // это не так. Правильно писать self-documented код, то есть который и так очевидный - без комментариев.
- $("#new-todo").setValue("task1").pressEnter();
- // 2 create task2
- $("#new-todo").setValue("task2").pressEnter();
- // 3 create task3
- $("#new-todo").setValue("task3").pressEnter();
- // 4 create task4
- $("#new-todo").setValue("task4").pressEnter();
- $$("#todo-list li").shouldHave(size(4));
- // этой проверки не достаточно. А если задачи создадутся не с такими текстами? а если в другом порядке?
- screenshot("2. all tasks");
- // 5 delete task2
- $$("#todo-list li").findBy(exactText("task2")).hover().$(".destroy").hover().click();
- // зачем тут второй ховер?
- $$("#todo-list li").shouldHave(exactTexts("task1", "task3", "task4"));
- screenshot("3. remove task #2");
- // 6 mark task4 as completed
- $$("#todo-list li").findBy(exactText("task4")).$(".toggle").click();
- // 7 clear completed
- $(By.id("clear-completed")).click(); // разве не проще $("#clear-completed") ?
- screenshot("4. remove task #4");
- // 8 mark all as completed
- $(By.id("toggle-all")).click();
- screenshot("5. complete");
- $(By.linkText("Active")).click(); // разве это было в задании? проверять фильтеринг?
- $$("#todo-list li").filter(visible).shouldBe(empty);
- screenshot("6. no active tasks");
- $(By.linkText("All")).click();
- $$("#todo-list li").shouldHave(size(2));
- screenshot("7. all completed");
- // 9 clear completed
- $(By.id("clear-completed")).click();
- screenshot("8. no tasks");
- // Issue: a long timeout
- $$("#todo-list li").shouldHave(size(0));
- // это ты нагородил свой ужос вот там с driver.timeouts.implicitlyWait
- // вот оно и заглючивает скорее всего
- // потому что у селениде свои вейты и они могут конфликтовать с этими
- }
- @AfterClass
- public static void tearDown() {
- // issue # - closeWebDriver - for FirefoxDriver - Geko
- // [Child 9900] ###!!! ABORT: Aborting on channel error.: file c:/builds/moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 2056
- // фев 11, 2017 12:17:52 PM org.openqa.selenium.os.UnixProcess destroy
- closeWebDriver();
- }
- // вот нефиг было извращатся c драйвером, скорее всего сам нахимичил что то в настройках, как с теми таймаутами и вот оно и не работает
- // в общем выкинь лишний код, и тогда посмотрим будет ли ошибка повторятся
- // и вообще то нужно эту домашку на фф решать :) а не хроме :)
- // не помню есть ли это в задании... но нужно дописать вдруг что. В хроме ее решать - это сильно много работы, и сильно глубоко в джаву прийдется копать в некоторых случаях... что ты в любом случае пока не потянешь...
- }
Advertisement
Add Comment
Please, Sign In to add comment