Передача экземпляра Webdriver из одного метода в другой метод (в том же классе) в Selenium - PullRequest
0 голосов
/ 19 ноября 2018

В моем классе всего четыре метода

Я создал статический WebDriver объект

static WebDriver driver;

Метод 1: вход на сайт (здесь я инициализирую WebDriver driver=new new FirefoxDriver();)

Способ 2. Щелкните ссылку на сайте (с помощью драйвера WebDriver). При нажатии открывается ссылка в новой вкладке в том же браузере

Метод 3:

СейчасВ методе 3 я переключаюсь на новую вкладку и выполняю некоторые действия с веб-элементом на новой вкладке

Ниже код используется для перехода на новую вкладку

ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabss.get(1));

Метод 4: Опять хочучтобы выполнить еще какое-то действие в новой вкладке

Теперь мне нужен тот же экземпляр драйвера (вкладка), который использовался в способе 3 в способе 4.

Как мне получить

Если я использую «драйвер» в методе 4, он будет нулевым.

public class download {
    static WebDriver driver;


    @Test
    public static void login() throws InterruptedException
    {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("__site__");
        driver.findElement(By.id("login-email")).sendKeys("__username__");
        driver.findElement(By.id("login-password")).sendKeys("__password__");
        driver.findElement(By.id("login-submit")).click();
        Thread.sleep(3000);
    }


    @Test
    public static void navigatetolearningpage() throws InterruptedException
    {

        driver.findElement(By.xpath("//div[@class='relative ember-view']")).click();
        Thread.sleep(3000);
    }

    @Test
    public static void search() throws InterruptedException, AWTException
    {

        ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(tabss.get(1));
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys("__searchkeyword__");
        Thread.sleep(3000);
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys(Keys.RETURN);
        Thread.sleep(3000);
        driver.findElement(By.xpath("//div[@class='search-facet__label']")).click();

    }

    @Test 
    public static void course_list() throws InterruptedException
    {
        //This driver will print as NULL
        System.out.println("last method:"+driver);

    }

}

1 Ответ

0 голосов
/ 19 ноября 2018

Порядок тестов не гарантируется, поэтому вам нужно инициализировать driver в начале тестов

Переместить код инициализации в объявление driver:

static WebDriver driver = new FirefoxDriver();

EDIT

После комментария @Laazo, Я думаю, что это лучше, чем добавить его в @BeforeClass, потому что, если вы переключитесь на среду TestNG, вам нужно будет изменить или обновить JUnit5 до @ BeforeAll

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