このトピックに関する投稿は大量にありますが、何らかの理由でChromeに関連するものはほとんど見つかりませんでした(最近、ヘッドレスのサポートが追加されたようです)。テストは、ブラウザを使用してローカルで実行されます。
JavaからXvfbディスプレイをトリガーして、すべてを1か所で管理できるようにすることはできますか?私はむしろする必要はありません:
Xvfb:1 -screen 0 1024x768x24&
コマンドライン経由。ディスプレイを実行してからシャットダウンすると便利です。
- プログラムでChromeDriverにSetEnvironmentPropertyを設定することが、私が解決策であることがわかったものです。
問題?Ubuntuマシンで動作させることができません。
私が受け取るエラーは次のとおりです。
/home/ubuntu/myproject/conf/chromedriver: 1: Syntax error: Unterminated quoted string
私が使用しているテストクラス:
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import play.Logger;
import utils.LocalInfo;
import com.google.common.collect.ImmutableMap;
public class TestCI {
private WebDriver driver;
@SuppressWarnings("deprecation")
public TestCI(String url) {
if (!LocalInfo.isEC2()) {
Logger.info("Running tests by opening a browser...");
System.setProperty("webdriver.chrome.driver", "conf/chromedriver");
setWebDriver(new ChromeDriver());
} else {
Logger.info("Running tests headlessly...");
String xPort = System.getProperty("Importal.xvfb.id", ":1");
ChromeDriverService service = new ChromeDriverService.Builder()
.usingChromeDriverExecutable(new File("conf/chromedriver"))
.usingAnyFreePort()
.withEnvironment(ImmutableMap.of("DISPLAY", xPort)).build();
setWebDriver(new ChromeDriver(service));
}
getWebDriver().get("http://www.google.com");
try {
someUITest();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
getWebDriver().close();
}
public WebDriver getWebDriver() {
return driver;
}
public void setWebDriver(ChromeDriver driver) {
this.driver = driver;
}
public void someUITest() throws Exception {
getWebDriver().findElement(By.name("q"));
}
}