无头的 ChromeDriver 引发 ElementNotVisibleException
ChromeDriver with headless raises ElementNotVisibleException
我是硒新手。我需要一个没有图形界面的浏览器,因为项目将从 Jenkins 开始。我决定在 Headdless 模式下使用 ChromeDriver。
当我在正常模式下使用ChrimeDriver时,我可以点击所有元素:
WebDriver driver = new ChromeDriver();
List<WebElement> allElem = driver.findElements(By.ByXPath("//div[@id='accordian']/div/ul/li"));
for(int i=0; i<allElem.getSize(); i++){
allElem.get(i).click(); // is ok
}
但是当我使用 Headdless 模式时,我遇到了:ElementNotVisibleException:元素不可见。有什么问题吗?谢谢你提供的每一条线索。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
//chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
List<WebElement> allElem = driver.findElements(By.ByXPath("//div[@id='accordian']/div/ul/li"));
for(int i=0; i<allElem.getSize(); i++){
allElem.get(i).click();//ElementNotVisibleException dont see next li elements
//div[@id='accordian']/div/ul/li
}
使用 Selenium 客户端 v3.11.0、Chrome 驱动程序 v2.36 和 Chrome 浏览器 v65.x 在 Headless Mode 中,你需要通过 Chrome 的实例传递以下参数Options Class 同时初始化 WebDriver 和 Web Browser 如下:
System.setProperty("webdriver.chrome.driver", "C:\path\to\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("start-maximized");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.co.in");
您需要传递 "--headless"
、chrome 选项,如下所示。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver(chromeOptions);
有关 chrome 选项的完整列表,请参阅以下 URL。它详细解释了每个命令行开关。
https://peter.sh/experiments/chromium-command-line-switches/
在使用 headless 模式时,我遇到了 org.openqa.selenium.UnhandledAlertException
由于没有处理弹出警报框的问题。所以如果你能处理警告框就更好了。
String alertText = alert.getText();
System.out.println("ERROR: (ALERT BOX DETECTED) - ALERT MSG : " + alertText);
alert.accept();
File outputFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
String imageDetails = "D://Images"
File screenShot = new File(imageDetails).getAbsoluteFile();
FileUtils.copyFile(outputFile, screenShot);
System.out.println("Screenshot saved: {}" + imageDetails);
driver.close();
我是硒新手。我需要一个没有图形界面的浏览器,因为项目将从 Jenkins 开始。我决定在 Headdless 模式下使用 ChromeDriver。
当我在正常模式下使用ChrimeDriver时,我可以点击所有元素:
WebDriver driver = new ChromeDriver();
List<WebElement> allElem = driver.findElements(By.ByXPath("//div[@id='accordian']/div/ul/li"));
for(int i=0; i<allElem.getSize(); i++){
allElem.get(i).click(); // is ok
}
但是当我使用 Headdless 模式时,我遇到了:ElementNotVisibleException:元素不可见。有什么问题吗?谢谢你提供的每一条线索。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
//chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
List<WebElement> allElem = driver.findElements(By.ByXPath("//div[@id='accordian']/div/ul/li"));
for(int i=0; i<allElem.getSize(); i++){
allElem.get(i).click();//ElementNotVisibleException dont see next li elements
//div[@id='accordian']/div/ul/li
}
使用 Selenium 客户端 v3.11.0、Chrome 驱动程序 v2.36 和 Chrome 浏览器 v65.x 在 Headless Mode 中,你需要通过 Chrome 的实例传递以下参数Options Class 同时初始化 WebDriver 和 Web Browser 如下:
System.setProperty("webdriver.chrome.driver", "C:\path\to\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("start-maximized");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.co.in");
您需要传递 "--headless"
、chrome 选项,如下所示。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver(chromeOptions);
有关 chrome 选项的完整列表,请参阅以下 URL。它详细解释了每个命令行开关。
https://peter.sh/experiments/chromium-command-line-switches/
在使用 headless 模式时,我遇到了 org.openqa.selenium.UnhandledAlertException
由于没有处理弹出警报框的问题。所以如果你能处理警告框就更好了。
String alertText = alert.getText();
System.out.println("ERROR: (ALERT BOX DETECTED) - ALERT MSG : " + alertText);
alert.accept();
File outputFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
String imageDetails = "D://Images"
File screenShot = new File(imageDetails).getAbsoluteFile();
FileUtils.copyFile(outputFile, screenShot);
System.out.println("Screenshot saved: {}" + imageDetails);
driver.close();