UIを備えたUbuntuサーバーも持っています。 Uはmvn testコマンドを実行してテストケースを実行できます。しかし問題は、別のマシンからターミナルを介してマシンのSSHを実行すると、次のエラーが発生することです。
unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-121-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.04 seconds
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T18:33:54.468Z'
System info: Host: 'ubuntu-test', ip: 'X.X.X.X', os.name: 'Linux', os.Arch: 'AMD64', os.version: '4.4.0-121-generic', Java.version: '1.8.0_171'
Driver info: driver.version: ChromeDriver
しかし、同じコマンドが起動しますchrome remminaを使用してマシンのリモートを取得し、このマシンのターミナルで同じコマンドを実行すると、正常に実行されます。
このエラーメッセージ...
unknown error: DevToolsActivePort file doesn't exist
...ChromeDriverが新しいWebBrowserieChrome Browserセッション。
コードのトライアルとすべてのバイナリのバージョン情報により、何が問題なのかについてのヒントが得られます。
ただし Add --disable-dev-shm-usage to default launch flags のように、引数を追加しているようです--disable-dev-shm-usage
は一時的に問題を解決します。
新しいChromeブラウザセッションを開始/スパンする場合は、次のJavaソリューションを使用できます。
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
base_switches.ccdisable-dev-shm-usage
はLinix OSでのみ有効であるようです:
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
ディスカッションで / dev/shmの代わりに/ tmpを使用するオプションを追加 Davidは次のように述べています:
/ dev/shmと/ tmpがどのようにマウントされているかによります。両方がtmpfsとしてマウントされている場合、違いはないと想定しています。何らかの理由で/ tmpがtmpfsとしてマップされていない場合(およびsystemdによってデフォルトでtmpfsとしてマップされていると思います)、chrome共有メモリ管理は、匿名の共有ファイルを作成するときに常にファイルをメモリにマップします。フラグが有効になっている状態でテレメトリテストを強制して、その状態を確認することができると思います。
なぜデフォルトで使用しないのかについては、それは共有メモリチームによって押し戻されたものです。デフォルトで共有メモリに/ dev/shmを使用するのは理にかなっていると思います。
最終的には、これらすべてがmemfd_createを使用するように移行するはずですが、リファクタリングが必要になるため、すぐには発生しないと思いますChromeメモリ管理。
Sudo
-特権なしでSelenium-serverを実行してみてください:
Java -jar path/to/Selenium-server-standalone.jar
CronジョブでSeleniumを実行すると、同じ問題に直面しました。そして長い苦しみの末、私はそれを解決する方法を見つけました。シェルスクリプトの先頭に次の行を追加するだけです。
export DISPLAY=:1
このメソッドを試してchrome Webドライバーをインスタンス化すると、ubuntuでこの問題を解決するのに役立ちます:
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_argument("--no-sandbox")
opt.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(chrome_options=opt,
executable_path='<your-chromedriver-path>')
driver.get('https://www.google.com/')
answer に対するコメントを@ George Pantazes に感謝
X-forwardなしでsshから実行すると、chromeブラウザがクラッシュします。DebanjanBが投稿したオプションを使用できないようにするために、最も重要なのは--headlessです。ルートとして実行している場合(推奨)--no-sandboxも必要です。
以前のバージョンのSelenium-Java(3.5.3)を新しいchromedriver(75.x)で使用した場合にも、このエラーが発生しました。 2.5.3バージョンの2.46バージョンのchromedriver、または3.141.59の75.xのSelenium Javaを使用するとうまくいきました。
ローカルのXvfbを実行することもできますが、ヘッドレスを使用することをお勧めします。
に提案された重複する投稿を確認し、更新して解決にマークしてください。
ヘッドレスモードでSelenium UIテストケースを実行しようとしたときにも、同様の問題が発生しました。これは、ディスプレイサーバーがないために発生しました。 Xvfbの起動は私のために働いた。
Sudo yum -y install Xvfb libXfont Xorg
Sudo yum -y groupinstall "X Window System" "Desktop" "Fonts" "General Purpose Desktop"
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:1
私はpythonを使用してこの構成を使用しています
import os
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("no-sandbox")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--headless")
driver = os.path.join("path/of/driver","chromedriver")
browser = webdriver.Chrome(executable_path=driver,chrome_options=chrome_options)
browser.get("https://www.example.com")
print(browser.title)