Я пытаюсь создать каркас (Selenium + TestNg + java) для веб-приложения (среда MacOs + ChromeDriver, а сервер драйверов находится в \ usr \ local \ bin), но застрял в базовой структуре.У меня есть класс (Driversetup.java), который запускает браузер, другой, который содержит WebElements и методы (ProfileUpdateObjects.java) и третий, содержащий методы тестирования.Теперь, когда я пытаюсь запустить этот класс TestNG, имеющий только один метод, я получаю следующее исключение.
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:138).
Ниже приведен код (все классы находятся в разных пакетах).
public class ProfileUpdateTest {
@Test(enabled = true, priority = 1)
public void profileUpdate() throws MalformedURLException, InterruptedException, ParseException {
WebDriver driver = DriverSetup.startBrowser("chrome");
ProfileUpdateObjects pu = PageFactory.initElements(driver, ProfileUpdateObjects.class);
pu.navigateProfile();
}
}
Код для класса ProfileUpdateObject
public class ProfileUpdateObjects {
WebDriver driver;
public ProfileUpdateObjects(WebDriver cdriver) {
this.driver = cdriver;
}
@FindBy(xpath = " //div[@class='ico-menu']")
private WebElement menu;
@FindBy(xpath = "//a[@title='My Dashboard']")
private WebElement myDashboard;
@FindBy(xpath = " //a[contains(text(),'View Profile')]")
public WebElement profile;
@FindBy(xpath = "//li[contains(text(),'Permanent Address')]")
private WebElement permanentAddress;
@FindBy(xpath = "//li[contains(text(),'Banking Information')]")
private WebElement bankingInformation;
WebDriverWait waitfor = new WebDriverWait(driver, 2000);
public void navigateProfile() throws InterruptedException {
menu.click();
profile.click();
waitfor.until(ExpectedConditions.visibilityOf(permanentAddress));
}
}
DriverSetup.java
public class DriverSetup {
public static WebDriver driver;
public static WebDriver startBrowser(String browserName, String url) {
if (browserName.equalsIgnoreCase("chrome")) {
driver = new ChromeDriver();
}
driver.manage().window().maximize();
driver.get(url);
return driver;
}
}
Ошибка при вызове pu.navigateProfile ().Кроме того, верно ли, что @FindBy требует больше памяти по сравнению с синтаксисом driver.find (), и помимо POM существуют ли другие принципы проектирования для среды автоматизации, поскольку большинство ресурсов через Web являются той или иной реализацией POM.