Selenium TestNG дизайн уточнения зависимостей - PullRequest
0 голосов
/ 30 ноября 2018

, так как я экспериментирую с TestNG, используя курс UDEMY, мне нужно уточнить часть зависимости.Ниже у меня есть метод, который будет входить в Gmail под названием gmailLogin ().У меня есть отдельный метод поиска темы в окне поиска Gmail (после входа в систему), называемый gmailSearch ().

Чтобы выполнить поиск, вам необходимо войти в свою учетную запись Gmail.Я сделал 2 вещи, чтобы поэкспериментировать

1) Предоставил неверную информацию в gmailLogin ().Это не удастся.2) Я не использовал зависящий от nmethods = "gmailLogin" в gmailSearch ().

Проверка gmailSearch () не завершается сбоем, поскольку он использует поиск по главной странице Google из @BeforeMethod.В поиске на главной странице Google также используется name = 'q'.

Вопрос: Какой хороший способ разработать метод gmailSearch (), чтобы он принудительно использовал gmailLogin ()?Если текущий процесс плохой, тогда я должен объединить логин и поиск одним методом?

Заранее благодарим за то, что нашли время объяснить / ответить.

public class GoogleTest {

    static WebDriver driver;    

    @BeforeMethod
    public void setUp(){
        System.setProperty("webdriver.chrome.driver", "path");
        driver=new ChromeDriver();
        driver.get("http://www.google.com");
        driver.manage().window().maximize();
    }

    @Test(priority=1)
    public void googleSearch(){
        driver.findElement(By.xpath("//input[@name='q']")).sendKeys("news");
        driver.findElement(By.xpath("//input[@value='Google Search']")).click();
        if(driver.getPageSource().contains("www.foxnews.com")){
            System.out.print("Search found");
        }       
    }
    @Test(priority=2,groups="Gmail")
    public void gmailIcon(){
        driver.findElement(By.xpath("//a[@href='https://mail.google.com/mail/?tab=wm']")).click();
        if(driver.getTitle().contains("Gmail")){
            System.out.print("Gmail found");
        }       
    }
    @Test(priority=2,groups="Gmail")
    public void gmailLogin(){
        WebDriverWait wait = new WebDriverWait(driver,30);

        driver.get("https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin");
        driver.findElement(By.xpath("//input[@type='email']")).sendKeys("aname@gmail.com");
        driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@type='password']")));
        driver.findElement(By.xpath("//input[@type='password']")).sendKeys("psd123");
        driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();
        if(driver.getTitle().contains("Inbox")){
            System.out.print("Gmail Inbox");
        }       
    }
    @Test(groups="Gmail")
    public void gmailSearch(){
        driver.findElement(By.xpath("//input[@name='q']")).sendKeys("QA"+ "\n");
        if(driver.getTitle().contains("Search Results")){
            System.out.print("Gmail Search");
        }       
    }
    @AfterMethod
    public void testDown(){
        driver.quit();
    }
}

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Для первого вопроса вы должны использовать dependsOnMethods для создания зависимости метода.То есть methodB должен выполняться только после methodA, тогда methodB должен иметь зависимостьOnMethods = "methodA"

@Test(dependsOnMethods="methodA")


Если вы новичок в автоматизации Selenium, ваш тест выглядит нормально.Но это может быть улучшено намного лучше.Вы пытаетесь обработать все в одном классе.

Этот класс выполняет следующие действия:

  • , выполняя тесты
  • , управляя жизненным циклом экземпляра веб-драйвера
  • бизнес-логика приложения
  • управление тестовыми данными

В идеале каждый класс должен нести только одну ответственность.Я бы посоветовал вам взглянуть на приведенные ниже сайты для лучшего дизайна

0 голосов
/ 01 декабря 2018

У вас есть все только в одном классе, что не очень хорошая идея, вам нужно иметь отдельные классы для каждой страницы.Лучше использовать POM (объектную модель страницы).В вашем случае у вас есть две разные страницы: страница входа и страница Gmail.Таким образом, вам нужен класс для каждого.Тогда вы можете иметь классы для вашего теста.Например, логин и поиск, в этом классе вы можете вызвать логин и поиск.Вам также необходимо подтвердить вход в систему, а затем начать поиск (у вас может быть тест, чтобы проверить имя пользователя, чтобы убедиться, что пользователь вошел в систему, а затем, если это нормально, вы можете выполнить тест).Использование POM поможет вам лучше управлять вашими тестами, особенно если ваш тестовый проект будет большим.Вы можете узнать больше о POM здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...