Замена assert на мягкую проверку verify в TestNG

значит у вас проблемы с инициализацией объекта homePage

посмотрите где он задекларирован

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

потому содержимое переменной не сохраняется

Задекларирован в классе с этими двумя методами

public class LoginTest extends BasicTestCase {

    private LoginPage loginPage = PageFactory.initElements(getWebDriver(),
            LoginPage.class);
    private HomePage homePage;

тут тогда без полного кода, тяжело будет узнать где проблема

и но все таки увебежден это проблема инициализации объектов между тестами

если есть возможность выпожить код, могу посмотреть

или же можете сделать примерочный простой код и полностью показать.

Буду чрезвычайно благодарен за помощь.

http://www.sendspace.com/file/6m2rml

pswd: 123qwe

1, имхо, Вы делаете много лишних проверок

2, если Вы хотите открыть страницу, а потом запустить n тестов, то вам лучше воспользоваться @BeforeClass и @AfterClass

3, выполните инициализацию homePage в @BeforeClass и дальше пользуйтесь уже инициализированным объектом

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

+ забыл добавить что у вас таким образом получаются зависимые тесты

а зависимые тесты плохи тем что могут поламаться цепочкой, как домино

будьте с этим осторожны, в общих случаях я рекомендую сделать тесты независимыми

я рекомендую сделать тесты независимыми


Спасибо Кэп, в этом какбы и есть смысл этой темы

не сказал бы, потому что человек хочет разделить один тест на два теста, но при этом чтобы страница не закрывалась и не перегружалась

т.е. если первый тест неправильно отработал и завел на какую-то другую страницу, то второй тест 100% упадет

в этом и есть зависимость

Под независимыми вы имеете ввиду такую логику тестов.

Первый тест:

1. Логинимся, - что по умолчанию приводит нас на первую страницу ,- делаем проверки, выходим.

Второй тест:

2. Снова логинимся, заходим на вторую страницу, делаем проверки, выходим.

Третий тест:

3. Снова логинимся, заходим на третью страницу, делаем проверки, выходим.. и т.д.

 

 

тут есть два варианта

1. первый тот который вы назвали

2 и второй, это залогиниться один раз в сессии, не закрывать браузер, но в каждом тесте сначала открывать нужную страницу, а потом уже производить необходимые действия.

Если не ошибаюсь, второй вариант мне как раз и нужен был изначально.

ок, мои извинения, значит я ошибался и не правильно понял

вот примерочный код на гугл правда, но я максимально выстроил Вашу структуру

Test1.java

package browser;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Test1 extends BaseTestCase{

    private HomePage home;

    @BeforeClass
    public void setup() {
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        home = PageFactory.initElements(driver, HomePage.class);
        home.open();
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }

    @Test
    public void testGoogle1Search() throws InterruptedException {
        GmailPage gmail = home.openGmail();
        gmail.doSomething();
        Thread.sleep(2000);
    }

    @Test
    public void testGoogleSearch2() throws InterruptedException {
        GooglePlus plus = home.openGooglePlus();
        plus.doSomething();
        Thread.sleep(2000);
    }

}

BaseTestCase.java

package browser;

import org.openqa.selenium.WebDriver;

public class BaseTestCase {
    protected static WebDriver driver;
}

HomePage.java

package browser;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

public class HomePage extends Page {

    public HomePage(WebDriver driver) {
        super(driver);
    }

    @Override
    public void open() {
        driver.get("https://www.google.com.ua/");
    }

    public GmailPage openGmail() {
        driver.get("https://gmail.com");
        return PageFactory.initElements(driver, GmailPage.class);
    }

    public GooglePlus openGooglePlus() {
        driver.get("http://plus.google.com");
        return PageFactory.initElements(driver, GooglePlus.class);
    }

}

GmailPage.java

package browser;

public class GmailPage {

    public void doSomething() {
        System.out.println("do something");
    }

}
 
GooglePlus.java
package browser;

public class GooglePlus {
    public void doSomething() {
        System.out.println("do something");
    }
}

Page.java

package browser;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public abstract class Page {

    protected static WebDriver driver;

    public Page(WebDriver driver) {
        Page.driver = driver;
    }

    protected void type(WebElement webElement, String text) {
        webElement.clear();
        webElement.sendKeys(text);
    }

    public abstract void open();
}

залил файлы сюда http://narod.ru/disk/64766789001.16d5fc0b80e6036cb52f3f534b855e69/browser.zip.html

Спасибо за помощь. Но я обнаружил другую причину того, что второй тест не запускался и выпадал с ошибкой java.lang.NullPointerException.

Как оказалось, тесты в очередь на запуск ставятся по алфавиту.

Вот какой был порядок запуска, который привел к ошибке:

PASSED: testLogin
PASSED: testStatement
PASSED: testStatement1
PASSED: testStatement2
FAILED: testFea

Если тест testFea переименовать к примеру на testOver - все проходит без ошибок.

это и я называю зависимость, о которой я писал ранее.

потому что успешный проход теста зависит от порядка выполнения тестов, и это есть плохо как видите

у TestNG можно указать приоритет выполнения тестов в аннотации @Test(priority=1)

попробуйте использовать пример можно посмотреть тут Priority в TestNG не работает вместе с dependsOnMethods

а также, если бы вы использовали аннотацию @BeforeClass и там выполняли необходимые для вас действия, как я выполнил в своем примере Замена assert на мягкую проверку verify в TestNG - #20 от пользователя polusok
тогда у вас не было бы таких проблем

@BeforeClass
public void setup() {
    loginPage = PageFactory.initElements(driver, LoginPage.class);
    loginPage.open();
    homePage = loginPage.loginAs(admin);
}

loginPage.open(); - открывает страницу с логином
homePage = loginPage.loginAs(admin); - вводит логин и пароль
после ввода логина и пароля загружается первая страница… но. BeforeClass не решил проблему с запуском тестов по “алфавиту” . или он не должен был это решить?

@BeforeClass и не должен был ничего решать с запуском в алфавитном порядке

просто через использование @BeforeClass, вы инициализируете нужные объекты перед использованием

почему у вас была nullpointer exception, потому что вы пытались использовать объект, который не был инициализирован

в предыдущем посте я писал на счет priority попробуйте его

priority помог, спасибо.

1, имхо, Вы делаете много лишних проверок

А как по вашему мнению лучше организовать проверки?