解決linux 運行自動化腳本瀏覽器無法啟動問題


1.前提你的驅動和版本對應無問題時,依舊報未知錯誤無法啟動chrome

解決方法加上兩行:

options.addArguments("no-sandbox");
options.addArguments("--disable-gpu");

其中
“–no-sandbox”參數是讓Chrome在root權限下跑
“–headless”參數是不用打開圖形界面

 

奉上我的TestNg源碼:

 

package com.chen.autocases;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
import org.apache.log4j.Logger;

import java.util.concurrent.TimeUnit;

public class TestDemo {
    private static Logger log = Logger.getLogger(TestDemo.class);
    public WebDriver driver;
    /*
    @param
        import java.util.HashMap;
        import java.util.Map;
        options.addArguments("--disable-popup-blocking"); // 禁用阻止彈出窗口
        options.addArguments("no-sandbox"); // 啟動無沙盒模式運行
        options.addArguments("disable-extensions"); // 禁用擴展
        options.addArguments("no-default-browser-check"); // 默認瀏覽器檢查
        Map<String, Object> prefs = new HashMap();
        prefs.put("credentials_enable_service", false);
        prefs.put("profile.password_manager_enabled", false);
        options.setExperimentalOption("prefs", prefs);// 禁用保存密碼提示框

        */

    @BeforeClass
    public void beforeClass() {
        System.setProperty("webdriver.chrome.driver", "/usr/local/chrome/chromedriver");
        ChromeOptions options = new ChromeOptions();
        options.setHeadless(Boolean.TRUE);
		options.addArguments("no-sandbox");
        options.addArguments("--disable-gpu");
        options.addArguments("--start-maximized"); // 啟動時自動最大化窗口
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get("http://www.baidu.com");
        log.info("用例開始執行------");
    }
    @AfterClass
    public void afterClass(){
            log.info("用例結束后運行----");
            driver.quit();
          }

    @Test
    public void testcase1(){
        log.info("testcase1");
        Assert.assertTrue(true);

    }
    @Test
    public void testcase2(){
        Assert.assertTrue(true);
        log.debug("testcase2");
    }
}

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM