Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class NewEmailTest {
- @BeforeClass
- public static void setup() {
- Configuration.browser = System.getProperty("driver.browser");
- }
- GmailPage gmailPage = new GmailPage();
- LoginPage loginPage = new LoginPage();
- @Test
- public void composeNewEmail() {
- разве ты в этом тесте только "создание имейла тестируешь", равне ты его не отсылаешь?
- забыл что имя метода должно описывать то что он делает?
- а вот имя класса я бы сделал более общим... пока не понятно что именно будет в него входить
- пока можно было бы просто GmailTest назвать
- ==========
- @BeforeClass
- public static void setup() {
- Configuration.browser = System.getProperty("driver.browser");
- }
- то довольно техническая вещь не имеющая отношения к тестовой логике
- лучше ее "скрыть" путем вынесения в BaseTest
- =========
- @Test
- public void composeNewEmail() {
- loginPage.signIn(TestData.login, TestData.password);
- gmailPage.writeAndSendNewEmail(TestData.emailSubject);
- gmailPage.assertEmailSentMessage();
- gmailPage.searchForEmailBySubject(TestData.emailSubject);
- gmailPage.ensureEmailWithTheSameSubject(TestData.emailSubject);
- gmailPage.goToSentEmailFolder();
- gmailPage.ensureEmailExistInSentMail(TestData.emailSubject);
- }
- что то я не вижу где ты вообще открываешь нужные страници?
- разве это не важная часть тест логики? что бы быть в самом тесте?
- ====
- gmailPage.writeAndSendNewEmail(TestData.emailSubject);
- вот не фиг было запихивать именно emailSubject в тест дата
- что то стоит куда то выносить если потенциально оно будет повторятся
- а в именно в этом тесте только и важен скорее всего этот сабджект
- поэтому можно было бы его оставить в самом тесте
- и даже нужно было бы... ведь это как раз важная часть тест логики...
- вот логин/пароль - это что секретное и то что стоит куда то вынести отдельно...
- и просто переиспользовать...
- более того... стоит наверное генерировать имя для сабджекта уникальным... что бы не перекрывалось с другими мейлами с таким же сабджектом
- как же вообще твой тест работает, если он должен только один мейл находить в поиске по саблджекту
- а у тебя там сто пятсот их будет с прошлих тестов с таким же сабджектом...
- -=======
- gmailPage.ensureEmailWithTheSameSubject(TestData.emailSubject);
- почему это в этом методе слово ensure используется?
- чем тебе assert не понравился?
- жду обьяснений
- это же касается другого случая в твоем коде..
- ======
- public void signIn(String login, String password) {
- open("http://gmail.com");
- loginAndPasswordSet(login, password);
- $(byText("COMPOSE")).shouldBe(visible);
- }
- вот это явно не правильно
- снова забыл о именах что они должны отражать то что делает метод?
- твой метод называется signIn
- а по факту деалет openAndSignIn
- нельзя так обманывать тех кто будет читать твой код...
- это конфузит...
- и вообще зачем лепить разные вещи в один метод, если можно два создать?
- =====
- дальше
- $(byText("COMPOSE")).shouldBe(visible);
- }
- зачем тут эта проверка?
- степы не должны включать проверки, если сильно не припечет
- да и не нужно это в селениде
- он и так подождет что кнопка эта видима когда ты попробуешь на ней кликнуть
- =========
- в целом....
- public void signIn(String login, String password) {
- open("http://gmail.com");
- loginAndPasswordSet(login, password);
- $(byText("COMPOSE")).shouldBe(visible);
- }
- public void loginAndPasswordSet(String login, String password) {
- $("#Email").setValue(login).pressEnter();
- $("#Passwd").setValue(password).pressEnter();
- }
- если у тебя отдельный метод для заполнения конфьорма логин креденешиалов
- и ты хочешь более общий метод signIn
- то да = это можно сделать....
- но во первых, если в нем внутри есть open
- то он должен жить не внутри LoginPage
- а где то в другом обьекте
- плюс имя у него должно быть более абстрактное - более в стиле "прекондишена а не степа"
- вот здесь как раз и используются слова типа ensure
- ensureSignIn
- но это должны быть еще более умные методы
- с проверкой не халогинены ли мы уже...
- в общем, это будет для тебя сильно сложна пока, так что рекомендую забить
- и выкинуть нафиг этот твой метод с такой реализацией
- ====
- public void writeAndSendNewEmail(String emailSubject) {
- $(byText("COMPOSE")).click();
- $(By.name("to")).setValue(TestData.contactEmail);
- $(By.name("subjectbox")).setValue(emailSubject);
- $(byText("Send")).click();
- }
- и снова ты захардкодил контакт имейл внутри метода...
- а что если из мы захотим написать другой тест и кому то другому контакт имейл отослать, а?
- что тогда делать?
- разве не очевидно что в этому случае нужно сделать ту же махинацию что ты с emailSubject сделал? :)
- ======
- public void ensureEmailWithTheSameSubject(String emailSubject) {
- $$(".UI>.Cp .zA").first().shouldHave(text(emailSubject));
- }
- во первых имя метода странное и не отображает то что метод делает...
- не говорит ничео о том что мы именно первый мейл в списке проверяем...
- во вторых локатор у тебя таки кривой...
- лучше так:
- $$("[role='main'] .zA");
- ======
- public void ensureEmailExistInSentMail(String emailSubject) {
- $(byText(emailSubject)).exists();
- }
- во первых ты должен был проверить также что в списке только один мейл найден а не первый в списке такой как нужно
- более того... проверка не точна... по тексту найти элемент мало...
- лучше конкретно найти все мейлы в списке и их проверять
Advertisement
Add Comment
Please, Sign In to add comment