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
так как состояние переменной экземпляра не будет сохранено по умолчанию.