Не могу передать переменную в метод Main (огурец) - PullRequest
1 голос
/ 21 апреля 2019

Я пытался создать метод и вызвать его из другого файла в основной класс, но он не сработает, сообщение об ошибке «java.lang.NullPointerException»

Main.class

Keywords kw = new Keywords();

@When("^gmailDD$") 
     public void gmailDD() throws Throwable{
     WebDriverWait wait5s = new WebDriverWait(driver, 5);
     String regis = "/html/body/div[2]/div[1]/div[5]/ul[1]/li[3]/a";
     String dd = "/html/body/div[1]/div/footer/div/div/div[1]";
     String empty = "/html/body/div[1]/div/footer";


     kw.clickbyxpath(regis);


     String handle= driver.getWindowHandle();
     System.out.println(handle);       
        // Store and Print the name of all the windows open               
        Set handles = driver.getWindowHandles();
        System.out.println("Log window id: "+handles);
        driver.switchTo().window("6442450949");

     kw.clickbyxpath(empty);   
     kw.clickbyxpath(dd);

}`

Method.class

WebDriver saddriver;

public void clickbyxpath (String xpathvalue) throws InterruptedException, IOException 
    {   
            WebDriverWait sad   =   new WebDriverWait(saddriver, 10); 

              //To wait for element visible
            System.out.println(xpathvalue);
            String x = xpathvalue;
            sad.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(x)));

            wowdriver.findElement(By.xpath(x)).click();                 
    }

Я пытался сделать ту же кодировку в том же файле, это не проблема, но когда я перемещаю Method.class в новый файл, появляется сообщение об ошибке «java.lang.NullPointerException», но я могу получить значение «xpathvalue» ,

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Итак, я бы посоветовал вам вывести веб-драйвер из своего метода и создать его экземпляр при создании экземпляра вашего веб-драйвера.Затем я бы создал такие методы:

Класс драйвера

private final String USER_DIRECTORY = System.getProperty("user.dir");
private final int GLOBAL_TIMEOUT = 30;
private WebDriver webDriver;
private WebDriverWait webDriverWait;


public Driver(String browserName) {
    this.browserName = browserName;
    System.out.println(browserName);
    switch (this.browserName.toUpperCase()) {

        case "CHROME":
            initializeChromeDriver();
            break;
    }
}
private void initializeChromeDriver() {
    System.setProperty("webdriver.chrome.driver", USER_DIRECTORY.concat("\\drivers\\chromedriver.exe"));
    webDriver = new ChromeDriver();
    webDriver.manage().window().maximize();
    webDriverWait = new WebDriverWait(webDriver, GLOBAL_TIMEOUT);
}

Метод нажатия

   public void buttonClickByXpath(String xpath) {
    try {
        WaitForPreseneOfElement(xpath);
        webDriver.findElement(By.xpath(xpath)).click();
    } catch (Exception e) {
        takeScreenshot();
        AllureLog("Failed to click on the button object. Please check your xpath. | xpath used = " + xpath + "");
        Assert.fail();

    }
}

Тестовый класс Импортируйте ваш класс драйвера

import Base.Driver;

Тогда вам нужно будет объявить свой класс драйвера следующим образом:

Driver driver; 

Теперь у вас будет доступ к вашему методу с помощью

driver.buttonClickByXpath(//YourXpathHere)
1 голос
/ 24 апреля 2019

Эта ошибка возникает из-за невозможности найти экземпляр вашего драйвера.

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

Method.class

package testing.framework;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Method {

    public WebDriver driver;
    WebElement _clickForSearch;
    public Method(WebDriver driver) {
        this.driver = driver;
    }
    public Method clickByXpath(String xpathValues) {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        _clickForSearch = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpathValues)));
        _clickForSearch.click();    
        return this;
    }


}

Testing.class

package testing.framework;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Testing {
    public static WebDriver driver;

    public static void main(String[] args) {

        getWebDriver();
        String xpathValues= "//div[@class='FPdoLc VlcLAe']//input[@name='btnK']";
        Method m1 = new Method(driver);
        m1.clickByXpath(xpathValues);

    }

    public static void getWebDriver() {
        System.setProperty("webdriver.chrome.driver", "Your chrome driver path");
        driver = new ChromeDriver();
        driver.get("https://www.google.com");
    }

}

Вам нужно передать экземпляр вашего драйвера другому.

0 голосов
/ 01 мая 2019

Проблема в том, что «Method m1 = new Method (driver);»Ключевое слово, я закодировал эту строку за пределами основного метода.Большое спасибо, сэр

...