yashaka

Untitled

Feb 16th, 2017
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.45 KB | None | 0 0
  1. package com.vovk.app;
  2.  
  3. import static com.codeborne.selenide.CollectionCondition.*;
  4.  
  5. import com.codeborne.selenide.*;
  6. import org.openqa.selenium.By;
  7. import org.openqa.selenium.JavascriptExecutor;
  8. import org.openqa.selenium.interactions.ActionChainExecutor;
  9. import org.openqa.selenium.interactions.Actions;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import org.junit.*;
  13. import org.openqa.selenium.WebDriver;
  14. import org.openqa.selenium.chrome.ChromeDriver;
  15. import org.openqa.selenium.firefox.FirefoxDriver;
  16. import org.openqa.selenium.firefox.MarionetteDriver;
  17. import org.openqa.selenium.remote.DesiredCapabilities;
  18.  
  19. import static com.codeborne.selenide.CollectionCondition.empty;
  20. import static com.codeborne.selenide.Condition.*;
  21. import static com.codeborne.selenide.Configuration.browser;
  22. import static com.codeborne.selenide.Selenide.*;
  23. import static com.codeborne.selenide.WebDriverRunner.*;
  24.  
  25.  
  26. import java.util.concurrent.TimeUnit;
  27. import com.codeborne.selenide.junit.ScreenShooter;
  28.  
  29. /**
  30.  * Created by Volodymyr on 11.02.2017.
  31.  */
  32. public class TodoMvcFlowTest {
  33.     // сдесь в имени слово Flow лишнее.. у нас только один тест класс - то есть достаточно что бы имя было общим...
  34.     // просто ТестиДляТудуЕмвісі то есть TodoMvcTest
  35.     private static Logger logger = LoggerFactory.getLogger( TodoMvcFlowTest.class );
  36.     /* тас, по логу вопросы видел в письме.
  37.        Отвечать не буду :)
  38.        Потому что это никому не нужно :) Особенно в этой домашке.
  39.        Какой Лог? ты что? зачем?
  40.      */
  41.  
  42.     @Rule
  43.     public ScreenShooter makeScreenshotOnFailure = ScreenShooter.failedTests().succeededTests();
  44.     /*
  45.        а это что такое?
  46.        Селениде и так на всех фейлах своих делает скриншоты АВТОМАТИЧЕСКИ.
  47.      */
  48.  
  49.     @BeforeClass
  50.     public static void setUp(){
  51.         // issue # - for FirefoxDriver - Geko
  52.         // JavaScript warning: https://todomvc4tasj.herokuapp.com/bower_components/requirejs/require.js, line 15: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
  53.  
  54.         System.setProperty("webdriver.chrome.driver", "D:\\!QA\\chromedriver.exe");
  55.             // вообще то достаточно должно быть прописать путь к хромдрайверу в переменную PATH
  56.             // в винде, только перегрузить ее потом надо скорее всего...
  57.         browser = "chrome";
  58.         // Это плохо... принято писать так: Configuration.browser
  59.         // в этом случае что бы было понятно что это за браузер такой - что это именно относится к конфигурейшену...
  60.         WebDriver driver = new ChromeDriver();
  61.         driver.get("https://todomvc4tasj.herokuapp.com"); // driver.get("https://google.com");
  62.         driver.manage().window().maximize();
  63.         driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
  64.         setWebDriver(driver);
  65.         // что вообще такое все эти строки? Селениде для того и был создан что бы всю эту лобуду не писать
  66.         // селениде сам создает драйвер, достаточно указать какой: Configuration.browser = "chrome"
  67.         // селениде сам делает maximize
  68.         // селениде сам умеет неявно ждать, если таймауте не хватает - ставишь его вот тут: Configuration.timeout = ...
  69.         // но зачем такой длинный таймаут? у тебя что комп 90тых годов?
  70.         // если у тебя тест не проходит в хроме - потому что задачи не создаются - там по другому ждать нужно
  71.         // нужно ждать догрузки джаваскрипта, но это другой вопрос, и он актуальный только если у тебя оно реально не работает...
  72.  
  73.         Configuration.reportsFolder = "test-result/reports";
  74.     }
  75.  
  76.     @Test
  77.     public void regularFlow() throws Exception {  // какой эксепшен???? зачем???
  78.         // сдесь не хватает cлова tasks в имени... а то не ясно чего флоу... ну хотя может это уже на любителя...
  79.         ElementsCollection tasks = null;   /// ???? что ЭТООООО какой нулл???? зачем????
  80.  
  81.         logger.debug("Just test message"); //такс, это выкинуть нафиг с глаз долой :)
  82.  
  83.         screenshot("1. start");   // нафиг. скриншоты и так делаются автоматически когда происходит ошибка, а больше они нигде и НЕ НУЖНЫ!!!!!
  84.  
  85.         // 1 create task1  
  86.             // зачем этот комментарий? - разве из кода не потяно и так что мы new todo set value делаем и соответственно задачу создаем?
  87.             // запомни - комментарии это зло. Потому что их сложно поддерживать. все постоянно забывают поменять комментарий когда поменяют код.
  88.             // и потом, люди раслабляются и пишут кривой код только по тому что думают комментарий все спасет
  89.             // это не так. Правильно писать self-documented код, то есть который и так очевидный - без комментариев.
  90.         $("#new-todo").setValue("task1").pressEnter();
  91.         // 2 create task2
  92.         $("#new-todo").setValue("task2").pressEnter();
  93.         // 3 create task3
  94.         $("#new-todo").setValue("task3").pressEnter();
  95.         // 4 create task4
  96.         $("#new-todo").setValue("task4").pressEnter();
  97.  
  98.         $$("#todo-list li").shouldHave(size(4));
  99.             // этой проверки не достаточно. А если задачи создадутся не с такими текстами? а если в другом порядке?
  100.         screenshot("2. all tasks");
  101.  
  102.         // 5 delete task2
  103.         $$("#todo-list li").findBy(exactText("task2")).hover().$(".destroy").hover().click();
  104.             // зачем тут второй ховер?
  105.         $$("#todo-list li").shouldHave(exactTexts("task1", "task3", "task4"));
  106.         screenshot("3. remove task #2");
  107.  
  108.         // 6 mark task4 as completed
  109.         $$("#todo-list li").findBy(exactText("task4")).$(".toggle").click();
  110.  
  111.         // 7 clear completed
  112.         $(By.id("clear-completed")).click(); // разве не проще $("#clear-completed") ?
  113.         screenshot("4. remove task #4");
  114.  
  115.         // 8 mark all as completed
  116.         $(By.id("toggle-all")).click();
  117.         screenshot("5. complete");
  118.  
  119.         $(By.linkText("Active")).click();   // разве это было в задании? проверять фильтеринг?
  120.  
  121.         $$("#todo-list li").filter(visible).shouldBe(empty);
  122.         screenshot("6. no active tasks");
  123.  
  124.         $(By.linkText("All")).click();
  125.  
  126.         $$("#todo-list li").shouldHave(size(2));
  127.         screenshot("7. all completed");
  128.  
  129.         // 9 clear completed
  130.         $(By.id("clear-completed")).click();
  131.         screenshot("8. no tasks");
  132.  
  133.         // Issue: a long timeout
  134.         $$("#todo-list li").shouldHave(size(0));
  135.             // это ты нагородил свой ужос вот там с driver.timeouts.implicitlyWait
  136.             // вот оно и заглючивает скорее всего
  137.             // потому что у селениде свои вейты и они могут конфликтовать с этими
  138.     }
  139.  
  140.     @AfterClass
  141.     public static void tearDown() {
  142.         // issue # - closeWebDriver - for FirefoxDriver - Geko
  143.         // [Child 9900] ###!!! ABORT: Aborting on channel error.: file c:/builds/moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 2056
  144.         // фев 11, 2017 12:17:52 PM org.openqa.selenium.os.UnixProcess destroy
  145.         closeWebDriver();
  146.     }
  147.     // вот нефиг было извращатся c драйвером, скорее всего сам нахимичил что то в настройках, как с теми таймаутами и вот оно и не работает
  148.     // в общем выкинь лишний код, и тогда посмотрим будет ли ошибка повторятся
  149.     // и вообще то нужно эту домашку на фф решать :) а не хроме :)
  150.     // не помню есть ли это в задании... но нужно дописать вдруг что. В хроме ее решать - это сильно много работы, и сильно глубоко в джаву прийдется копать в некоторых случаях... что ты в любом случае пока не потянешь...
  151. }
Advertisement
Add Comment
Please, Sign In to add comment