Как я могу запустить Selenium в текущем окне Firefox? Не открывая новое окно

Мне нужно запустить код JAVA Selenium в текущем окне Firefox. Но когда я запускаю свой код, WebDriver driver = new FirefoxDriver(); откроется новое окно! Не нужно открывать новое окно! В Selenium IDE код работает в текущем окне браузера.

package tm.csgo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Item {

public String siteUrl;
public String url;
public String name;
public int bought;
public int needCount;
public int wantPrice;
public double price;

public void buyProcess() {

    System.out.println("Начало покупки, запуск браузера...");
    System.out.println("Запланировано приобрести " + needCount + " " + name + " предметов.");

    WebDriver driver = new FirefoxDriver();


    while(bought <= needCount){

        System.out.println("Приобретаем " + bought + " предмет");
        driver.get(siteUrl + url);
        price = Double.parseDouble(driver.findElement(By.className("ip-bestprice")).getText());

        System.out.println("Стоимость предмета " + name + ": " + price + " рублей");

        if (price <= wantPrice) {

            System.out.println("Покупаем " + name + "...");
            driver.findElement(By.cssSelector("a.buy-pic-button")).click();
            driver.findElement(By.id("info_dialog_url")).click();

        } else {
            continue;
            }

        System.out.println("Приобретён " + bought + " предмет за " + price + " рублей из " + needCount + " запланированных предметов");
        bought++;
    }

}

public void purchaseReady() {
    //дописать общую сумму затрат
    System.out.println("Приобретено предметов на сумму ...");
    System.out.println("Покупка успешно завершена!");
}

}


person GoldenScrew    schedule 16.03.2016    source источник
comment
Какую версию Selenium вы используете? Это возможно как с WebDriver, так и с Selenium2. Хотя насчет других версий не уверен.   -  person Brian    schedule 16.03.2016
comment
Последние версии Selenium и Java.   -  person GoldenScrew    schedule 17.03.2016
comment
2.53 можно?   -  person GoldenScrew    schedule 17.03.2016
comment
Тогда вы, вероятно, звоните driver.quit(). Вы должны опубликовать свой код, чтобы мы могли его просмотреть.   -  person Brian    schedule 17.03.2016
comment
мой код прост. Я начинаю с этого: WebDriver driver = new FirefoxDriver();А затем мне нужно использовать сайт, но сайт должен иметь файлы cookie для его использования. Но я не могу войти в каждый код, потому что сайт: steamcommunity.com Где для входа я должен использовать мобильный защита от пара...   -  person GoldenScrew    schedule 17.03.2016
comment
Как я упоминал выше, вы звоните driver.quit();? Используете ли вы какие-либо аннотации, такие как @BeforeMethod или @AfterMethod? Вызов .quit() уничтожит экземпляр браузера.   -  person Brian    schedule 17.03.2016
comment
Если я использую driver.quit();, у меня возникает ошибка: Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.. Я добавил свой код в основной вопрос. Подскажите, пожалуйста, где я должен использовать driver.quit(); и как?   -  person GoldenScrew    schedule 17.03.2016


Ответы (1)


В моем случае я использую Selenium с junit для запуска отдельных тестов. Вот в основном архитектура:

  1. У меня есть одноэлементный класс Context, который создает экземпляр Selenium WebDriver в зависимости от браузера. В рамках реализации я проверяю, webDriver = null;. Для браузера if (browser == Browser.IE) и т. д. Вот код, который возвращает экземпляр WebDriver:

    public WebDriver getWebDriver() {
        if (webDriver != null) {
            return webDriver;
        }
    }
    
  2. У меня есть базовый тестовый класс, который создает экземпляр Context. В @Before у меня есть метод настройки для запуска браузера:

    @Before
    public final void setUp() {
        startBrowser();
    }
    

    Вот метод startBrowser:

    private void startBrowser() {
        context.getWebDriver().get("about:blank"); 
    }
    
  3. В рамках базового тестового класса у меня также есть аннотация @AfterClass, которая закрывает браузер:

    @AfterClass
    public static void tearDownClass() {
        Context.getSingleton().quit();
    }
    
  4. Последние шаги — включить все аннотации @Test между аннотациями @Before и @AfterClass. Все они будут выполняться без перезапуска браузера. Если вы решите развивать этот фреймворк дальше, я бы посоветовал вам создать еще один класс, расширяющий тестовый и содержащий только тесты (все методы @Test). Также в моем случае я использую шаблон PageObject. Все это поможет вам улучшить структуру тестового фреймворка и оптимизировать ваш код в случае изменений.

Надеюсь, это поможет вам!

person Lora Borisova    schedule 17.03.2016