yashaka

Untitled

Feb 16th, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 KB | None | 0 0
  1. public class NewEmailTest {
  2.  
  3. @BeforeClass
  4. public static void setup() {
  5. Configuration.browser = System.getProperty("driver.browser");
  6. }
  7.  
  8. GmailPage gmailPage = new GmailPage();
  9. LoginPage loginPage = new LoginPage();
  10.  
  11. @Test
  12. public void composeNewEmail() {
  13.  
  14. разве ты в этом тесте только "создание имейла тестируешь", равне ты его не отсылаешь?
  15. забыл что имя метода должно описывать то что он делает?
  16.  
  17. а вот имя класса я бы сделал более общим... пока не понятно что именно будет в него входить
  18. пока можно было бы просто GmailTest назвать
  19.  
  20. ==========
  21.  
  22.  
  23. @BeforeClass
  24. public static void setup() {
  25. Configuration.browser = System.getProperty("driver.browser");
  26. }
  27.  
  28. то довольно техническая вещь не имеющая отношения к тестовой логике
  29. лучше ее "скрыть" путем вынесения в BaseTest
  30.  
  31. =========
  32.  
  33. @Test
  34. public void composeNewEmail() {
  35. loginPage.signIn(TestData.login, TestData.password);
  36. gmailPage.writeAndSendNewEmail(TestData.emailSubject);
  37. gmailPage.assertEmailSentMessage();
  38. gmailPage.searchForEmailBySubject(TestData.emailSubject);
  39. gmailPage.ensureEmailWithTheSameSubject(TestData.emailSubject);
  40. gmailPage.goToSentEmailFolder();
  41. gmailPage.ensureEmailExistInSentMail(TestData.emailSubject);
  42. }
  43.  
  44. что то я не вижу где ты вообще открываешь нужные страници?
  45. разве это не важная часть тест логики? что бы быть в самом тесте?
  46.  
  47. ====
  48.  
  49.  
  50. gmailPage.writeAndSendNewEmail(TestData.emailSubject);
  51.  
  52. вот не фиг было запихивать именно emailSubject в тест дата
  53.  
  54. что то стоит куда то выносить если потенциально оно будет повторятся
  55.  
  56. а в именно в этом тесте только и важен скорее всего этот сабджект
  57. поэтому можно было бы его оставить в самом тесте
  58.  
  59. и даже нужно было бы... ведь это как раз важная часть тест логики...
  60. вот логин/пароль - это что секретное и то что стоит куда то вынести отдельно...
  61.  
  62. и просто переиспользовать...
  63.  
  64. более того... стоит наверное генерировать имя для сабджекта уникальным... что бы не перекрывалось с другими мейлами с таким же сабджектом
  65.  
  66. как же вообще твой тест работает, если он должен только один мейл находить в поиске по саблджекту
  67. а у тебя там сто пятсот их будет с прошлих тестов с таким же сабджектом...
  68.  
  69. -=======
  70.  
  71. gmailPage.ensureEmailWithTheSameSubject(TestData.emailSubject);
  72.  
  73. почему это в этом методе слово ensure используется?
  74. чем тебе assert не понравился?
  75. жду обьяснений
  76.  
  77. это же касается другого случая в твоем коде..
  78. ======
  79. public void signIn(String login, String password) {
  80. open("http://gmail.com");
  81. loginAndPasswordSet(login, password);
  82. $(byText("COMPOSE")).shouldBe(visible);
  83. }
  84.  
  85. вот это явно не правильно
  86.  
  87. снова забыл о именах что они должны отражать то что делает метод?
  88.  
  89. твой метод называется signIn
  90. а по факту деалет openAndSignIn
  91. нельзя так обманывать тех кто будет читать твой код...
  92.  
  93. это конфузит...
  94.  
  95. и вообще зачем лепить разные вещи в один метод, если можно два создать?
  96.  
  97. =====
  98.  
  99. дальше
  100.  
  101.  
  102. $(byText("COMPOSE")).shouldBe(visible);
  103. }
  104.  
  105. зачем тут эта проверка?
  106.  
  107. степы не должны включать проверки, если сильно не припечет
  108.  
  109. да и не нужно это в селениде
  110.  
  111. он и так подождет что кнопка эта видима когда ты попробуешь на ней кликнуть
  112.  
  113. =========
  114.  
  115. в целом....
  116.  
  117. public void signIn(String login, String password) {
  118. open("http://gmail.com");
  119. loginAndPasswordSet(login, password);
  120. $(byText("COMPOSE")).shouldBe(visible);
  121. }
  122.  
  123. public void loginAndPasswordSet(String login, String password) {
  124. $("#Email").setValue(login).pressEnter();
  125. $("#Passwd").setValue(password).pressEnter();
  126. }
  127.  
  128. если у тебя отдельный метод для заполнения конфьорма логин креденешиалов
  129.  
  130. и ты хочешь более общий метод signIn
  131. то да = это можно сделать....
  132.  
  133. но во первых, если в нем внутри есть open
  134. то он должен жить не внутри LoginPage
  135.  
  136. а где то в другом обьекте
  137.  
  138. плюс имя у него должно быть более абстрактное - более в стиле "прекондишена а не степа"
  139.  
  140. вот здесь как раз и используются слова типа ensure
  141.  
  142. ensureSignIn
  143.  
  144. но это должны быть еще более умные методы
  145. с проверкой не халогинены ли мы уже...
  146.  
  147. в общем, это будет для тебя сильно сложна пока, так что рекомендую забить
  148.  
  149. и выкинуть нафиг этот твой метод с такой реализацией
  150.  
  151. ====
  152.  
  153. public void writeAndSendNewEmail(String emailSubject) {
  154. $(byText("COMPOSE")).click();
  155. $(By.name("to")).setValue(TestData.contactEmail);
  156. $(By.name("subjectbox")).setValue(emailSubject);
  157. $(byText("Send")).click();
  158. }
  159.  
  160. и снова ты захардкодил контакт имейл внутри метода...
  161.  
  162. а что если из мы захотим написать другой тест и кому то другому контакт имейл отослать, а?
  163.  
  164. что тогда делать?
  165.  
  166. разве не очевидно что в этому случае нужно сделать ту же махинацию что ты с emailSubject сделал? :)
  167.  
  168. ======
  169.  
  170. public void ensureEmailWithTheSameSubject(String emailSubject) {
  171. $$(".UI>.Cp .zA").first().shouldHave(text(emailSubject));
  172. }
  173.  
  174. во первых имя метода странное и не отображает то что метод делает...
  175. не говорит ничео о том что мы именно первый мейл в списке проверяем...
  176.  
  177.  
  178. во вторых локатор у тебя таки кривой...
  179.  
  180. лучше так:
  181.  
  182. $$("[role='main'] .zA");
  183.  
  184.  
  185. ======
  186. public void ensureEmailExistInSentMail(String emailSubject) {
  187. $(byText(emailSubject)).exists();
  188. }
  189.  
  190. во первых ты должен был проверить также что в списке только один мейл найден а не первый в списке такой как нужно
  191.  
  192. более того... проверка не точна... по тексту найти элемент мало...
  193. лучше конкретно найти все мейлы в списке и их проверять
Advertisement
Add Comment
Please, Sign In to add comment