我正在尝试在Chrome无头模式下运行测试,但得到 java.lang.NullPointerException
Chrome版本:72.0.3626.121版(正式版本)(64位)
硒版本:3.8.1
Chromedriver版本:2.45.615355
这是我的BaseTest:
public abstract class BaseTest {
public WebDriver driver;
protected abstract String getUrl();
@Before
public void setUp() {
Log.startLog("Test is Starting...");
System.setProperty("webdriver.chrome.driver", "src//test//resources//chromedriver");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(true);
WebDriver driver = new ChromeDriver(chromeOptions);
driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get(getUrl());
}
@After
public void tearDown() {
Log.endLog("Test is Ending...");
driver.manage().deleteAllCookies();
driver.close();
}
}
当我运行测试时,不是在无头模式下,每个测试都运行良好,但在无头模式下,我什至无法运行简单的测试来了解无头模式是否在工作。
测试示例:
@Test
public void test() {
System.out.println(driver.getTitle());
}
示例网址:https://www.wikipedia.org/
更新: 我使用以下代码创建了新的示例项目:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class test {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "/Users/alexsomov/Desktop/chromedriver2");
//Set Chrome Headless mode as TRUE
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
//Instantiate Web Driver
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
System.out.println("Page title is - " + driver.getTitle());
driver.close();
}
宾果游戏,一切工作正常...需要弄清楚为什么实际项目中的上述代码无法正常工作,对于BaseTest类来说似乎有些问题,当我使用调试器运行代码时,我得到了 driver == null ,也许任何人都可以找到解决该问题的方法:/
答案 该解决方案超级简单,只需在BaseTest类的setUp()方法中更改1个字符串即可。
这个:
WebDriver driver = new ChromeDriver(chromeOptions);
更改为此:
driver = new ChromeDriver(chromeOptions);
一切都会正常工作。
答案 0 :(得分:0)
如果您使用的是Linux环境,则可能还必须添加--no-sandbox以及特定的窗口大小设置。如果正确设置用户容器,则Windows中不需要--no-sandbox。
disable-gpu仅在Windows上。其他平台不再需要它。 --disable-gpu标志是一些错误的临时解决方法。
if(browser.equalsIgnoreCase("HLChrome")){
//Headless chrome browser and configure
WebDriverManager.chromedriver().setup();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("disable-gpu");
// chromeOptions.addArguments("window-size=1400,2100"); // linux should be activate
driver = new ChromeDriver(chromeOptions);
答案 1 :(得分:0)
ANSWER该解决方案非常简单,只需在BaseTest类的setUp()方法中更改1个字符串即可。
这个:
.ui-treetable-table {
tbody {
tr:nth-child(even) {
background: #e9ecef;
}
}
}
更改为此:
WebDriver driver = new ChromeDriver(chromeOptions);
一切都会正常工作。