Selenium PageObject генерирует исключение целевой задачи Invocation - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь создать каркас (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.

1 Ответ

0 голосов
/ 21 марта 2019

Простое решение - переместить new WebDriverWait.Его нельзя создавать как переменную экземпляра.

Вместо:

WebDriverWait waitfor = new WebDriverWait(driver, 2000);

    public void navigateProfile() throws InterruptedException {
        menu.click();
        profile.click();
        waitfor.until(ExpectedConditions.visibilityOf(permanentAddress));
    }

Использование:

    public void navigateProfile() {
        menu.click();
        profile.click();
        new WebDriverWait(driver, 2000).until(ExpectedConditions.visibilityOf(permanentAddress));
    }

Это решит вашу проблему (уже проверено)

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