Selenium: метод не выполняется после запуска браузера с правильным URL-адресом.

Мой сценарий: Пакет A, имеющий класс X, класс Y

Класс X открывает драйвер и URL, поэтому создал метод как opendriver() и установил аннотацию как @BeforeTest.

В классе Y я создал метод для нажатия на ссылку для входа и установки аннотации как @Test

Поэтому, как только я запускаю пакет через testng.xml, браузер запускается с правильным URL-адресом, но я получаю исключение NullPointer при выполнении метода clickon login link.

Мой вопрос: как мне справиться с вышеописанным сценарием? как выполнить клик на метод входа в систему после открытия URL

1 ответ

Метонд с комментариями @BeforeTest аннотация будет выполнена, если в вас добавлен соответствующий класс testng.xml в <test><classes><class> пометить вместе с TestClass с @Test аннотаций.

Пример:

public class TestNG1 {
    @BeforeTest
    public void init() {
        System.out.println("Initialized");
    }
}

public class TestNG2 {
    @Test
    public void doSomeThing() {
        System.out.println("Test method");
    }
}

Тогда testng.xml должен понравиться

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="com.sample.TestNG1"/>
       <class name="com.sample.TestNG2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Итак, убедитесь, что вы добавили класс в свой testng.xml где вы инициализируете веб-драйвер.

Редактирование, чтобы дать более прямое решение проблемы под рукой.

Базовый класс, где инициализируется веб-драйвер

public class BaseTest {

    private static final String HOMEPAGE = "http://www.google.com";
    private static final String HOMEPAGE_TITLE = "Google";

    protected static WebDriverWait wait;
    protected static WebDriver driver;

    @BeforeTest
    public void setUp() {
        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver, 60);
    }

    @Test
    public void openGoogle() {
        driver.get(HOMEPAGE);
        wait.until(ExpectedConditions.titleContains(HOMEPAGE_TITLE));

        final String windowTitle = driver.getTitle();
        System.out.println(windowTitle);
    }

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

}

Зависимый класс, в котором используется предварительно инициализированный драйвер.

public class SearchTest extends BaseTest {

    private static final String SEARCH_BTN_NAME = "btnG";
    private static final String SEARCH_BOX_ID = "lst-ib";

    @Test(testName = "search", dependsOnMethods="openGoogle")
    public void search() {
        driver.findElement(By.id(SEARCH_BOX_ID)).sendKeys("Sharath Bhaskara");
        driver.findElement(By.name(SEARCH_BTN_NAME)).click();
    }

}

testng.xml, который запускает полный набор тестов.

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="WebdriverTest">
    <classes>
      <class name="com.sample.project.BaseTest"/>
       <class name="com.sample.project.SearchTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Примечание. Экземпляр WebDriver в BaseTest отмечен protected static так как состояние переменной экземпляра не будет сохранено по умолчанию.

Другие вопросы по тегам