передача ChromeOptions без создания нового экземпляра WebDriver

Я пытаюсь передать ChromeOptions моему драйверу, чтобы разрешить всплывающие окна. Я использую TestNG с аннотациями @BeforeClass, @Test и @AfterClass. Я пытаюсь включить всплывающие окна, и мне это удалось, используя следующий метод.

@BeforeClass
public void setUp(){
    if (driver instanceof ChromeDriver){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-popup-blocking");
        driver = new ChromeDriver(options);
    }
   }

Хотя это работает, он открывает веб-драйвер, а затем открывает другой с параметрами. Я не хочу, чтобы всплывали два веб-драйвера. Я просто хочу передать эти параметры первому веб-драйверу! Я запускаю их, используя xml и класс TestExtension, где создаются экземпляры драйверов, и я не хочу изменять этот класс. Есть ли способ изменить драйвер = новый ChromeDriver (параметры) на что-то, что просто передаст эти параметры? Спасибо!


person Tree55Topz    schedule 29.02.2016    source источник
comment
Вы должны вызывать new ChromeDriver() где-то еще в своем коде. Где?   -  person SiKing    schedule 29.02.2016
comment
@SiKing Правильно, мы используем отдельный класс TestExtension, который обрабатывает все предварительные настройки, параметры стека браузера и т. Д. Именно здесь он создается. Однако я бы предпочел не изменять это ..   -  person Tree55Topz    schedule 29.02.2016
comment
Каждый раз, когда вы звоните new ...Driver(), открывается новый браузер. Вот как работает Селен!   -  person SiKing    schedule 29.02.2016
comment
@SiKing Я знаю об этом, и именно поэтому я пытаюсь найти способ просто передать эти параметры ... например, если есть способ сделать driver.addOptions () или что-то в этом роде, а не создавать новый драйвер с параметрами прошел в.   -  person Tree55Topz    schedule 29.02.2016
comment
Эти параметры передаются браузеру при запуске. Селен не имеет к этому никакого отношения.   -  person SiKing    schedule 29.02.2016
comment
ОП, если вы не хотите изменять свой класс TestExtension, потому что это нестандартный тест, то, по сути, вам придется создать новый специальный тест, который открывает второй браузер. В противном случае сделайте TestExtension достаточно умным, чтобы справиться с этой ситуацией. У вас не может быть и того, и другого.   -  person Andrew Regan    schedule 01.03.2016


Ответы (1)


Вы не можете сделать это, не изменив свой класс TestExtension. Причина в том, что любые аргументы, которые вы передаете, передаются браузеру, который создается во время создания экземпляра. После этого невозможно что-либо изменить, чтобы изменить поведение порожденного браузера. Вам нужно будет изменить свой класс TestExtension, а затем предоставить механизм, в котором пользователь может также вводить свои собственные возможности, которые будут рассмотрены TestExtension до запуска браузера. Это может быть столь же тривиально, как передача полного имени пакета класса, который при вызове может создавать экземпляр объекта возможности, который вы передаете через аргумент JVM.

Ваш класс TestExtension будет в основном проверять аргумент JVM на наличие любых передаваемых пользовательских возможностей, и если он будет найден, он также объединит эти возможности со своими возможностями, а затем создаст браузер. Это единственный способ сделать это.

person Krishnan Mahadevan    schedule 01.03.2016
comment
Это то, чего я боялся, но я знал, что это, скорее всего, будет единственным способом... Ну что ж, спросить стоило. Спасибо :) - person Tree55Topz; 02.03.2016