t.me/atinfo_chat Telegram группа по автоматизации тестирования

Не работает добавление аргументов в ChromeOptions

Теги: #<Tag:0x00007f748eb43e08> #<Tag:0x00007f748eb43d40> #<Tag:0x00007f748eb43c78> #<Tag:0x00007f748eb43bb0>

Запускаю тесты на виртуалке. Мне надо запускать c headless i no-sandbox. Если пробрасую через options.addArguments ничего не работает.

если через Configuration.headless=true; все ок но так незнаю как прописать no-sandbox

Лог дженкинса

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4:test (default-test) on project mysite.com.Allure: There are test failures.
[ERROR] 
[ERROR] Please refer to /home/workspace/adv_page/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] There was an error in the forked processSuite file /home/workspace/adv_page/test_advPage.xml is not a valid file
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked processSuite file /home/workspace/adv_page/test_advPage.xml is not a valid file
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:675)
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:285)
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:248)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1217)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1063)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:889)
[ERROR] 	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR] 	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
[ERROR] 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR] 	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR] 	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:954)
[ERROR] 	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR] 	at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
[ERROR] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] 	at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Build step 'Execute shell' marked build as failure

Код

    ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        options.addArguments("--disable-gpu");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-infobars");
        options.addArguments("--start-maximized");

        ChromeDriver driver = new ChromeDriver(options);
        WebDriverManager.getInstance(CHROME).setup();

        Configuration.baseUrl = "https://www.mysite.com/";
        Configuration.browser = "chrome";
        Configuration.timeout = 6000;
        
        WebDriverRunner.setWebDriver(driver);

Проблема еще в том что на локальной машине все ок - на вирткалке падает
Запускаю на федоре

У меня так завелось:

        Configuration.headless = true;
        System.setProperty("chromeoptions.args", 
               "\"--no-sandbox\",\"--disable-dev-shm-usage\"");

к сожалению не помогло =(

Речь идёт про эту багу?

Вроде того. Есть ли шансы что это в ближайшем времени пофикситься?

Есть конечно.
Кстати, можете помочь: это опенсорс, каждый может прислать свой pull request.

Но давайте всё-таки уточним: для локального и удалённого запуска вы используете разный код? Получается, что в посте вы показали только часть кода:

ChromeDriver driver = new ChromeDriver(options);
WebDriverRunner.setWebDriver(driver);

Причём именно эта часть - работает. А ту, которая не работает - не показали. Так?

Код локально и на виртуалrt одинаков. Код основного файла конфига. На счет помощи я конечно попитаюсь но незнаю насколько хватит моих сил =))

package mysite.config;

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.Screenshots;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.WebDriverRunner;
import com.google.common.io.Files;
import io.github.bonigarcia.wdm.ChromeDriverManager;
import io.github.bonigarcia.wdm.WebDriverManager;
import io.qameta.allure.Attachment;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;

import java.io.File;
import java.io.IOException;

import static io.github.bonigarcia.wdm.DriverManagerType.CHROME;


public class Config {

    @BeforeClass
    public void setUp() {


        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        options.addArguments("--disable-gpu");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-infobars");
        options.addArguments("--start-maximized");

        ChromeDriver driver = new ChromeDriver();
        WebDriverManager.getInstance(CHROME).setup();

        Configuration.baseUrl = "https://www.mysite.com/";
        Configuration.browser = "chrome";
        Configuration.timeout = 6000;

        Configuration.holdBrowserOpen = false;
        System.setProperty("selenide.browser", "chrome");
        System.setProperty("chrome.switches","-Dselenide.dismissModalDialogs=true");
        System.setProperty("chrome.switches","-Dselenide.disable-popup-blocking");
    
        WebDriverRunner.setWebDriver(driver);

    }

    @AfterClass
    public void addScreenshotToErrorTest() throws IOException {
        File lastSelenideScreenshot = Screenshots.getLastScreenshot();
        if (lastSelenideScreenshot != null) {
            lastSelenideScreenshot.renameTo(new File("build/reports/tests/" + this.getClass().getName() + lastSelenideScreenshot.getName()));
        }
    }
}

Нет, если код одинаков, то это не та бага.

Тогда вам самим нужно разбираться со своим кодом. Вы же сами открываете браузер со всеми настройками, селенид тут не при чём. Селенид только использует тот браузер, что мы ему передали через метод WebDriverRunner.setWebDriver.

Странно, у вас в верхнем примере options передаются при создании нового драйвера. А в последнем примере нет