web-dev-qa-db-ja.com

ヘッドレスChromeブラウザを使用する場合、ElementNotVisibleException

ヘッドレスモードでテストスクリプトを実行すると、chromeブラウザ、要素リンクが表示されず、linkElement.click()を実行できません。ヘッドモードではすべて問題ありません。他のすべての情報は誰もが何をすべきか知っていますか?

スタックトレース:

エラーが発生しました:メッセージ:要素が表示されていません
(セッション情報:ヘッドレスクロム= 60.0.3112.90)
(ドライバー情報:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8)、platform = Windows NT 6.1.7601 SP1 x86_64)
トレースバック(最新の通話が最後):
ファイル「C:\ nik-x.py」、148行目、メイン
func(nik)
ファイル「C:\ lib\support.py」、行121、ラッパー
レイトを上げる
ファイル「C:\ lib\support.py」、108行目、newFunc
res [0] = func(* args、** kwargs)
ファイル「C:\ testcases\nik-1003.py」、37行目、テストケース
i.click()
ファイル "C:\ Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py"、7行目
7、クリック
self._execute(Command.CLICK_ELEMENT)
ファイル "C:\ Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py"、4行目
93、_execute
return self._parent.execute(command、params)
ファイル「C:\ Python36\lib\site-packages\Selenium\webdriver\remote\webdriver.py」、25行目
6、実行中
self.error_handler.check_response(response)
ファイル「C:\ Python36\lib\site-packages\Selenium\webdriver\remote\errorhandler.py」、行
194、check_response
raise exception_class(message、screen、stacktrace)
Selenium.common.exceptions.ElementNotVisibleException:Message:element not visible
(セッション情報:ヘッドレスクロム= 60.0.3112.90)
(ドライバー情報:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8)、platform = Windows NT 6.1.7601 SP1 x86_64)

これが私のコードです:
icons = nik.elementLeftmenuSportIcons() for i in icons[:-1]: try: i.click()

テストページのHTML:<a href="#" class="default b_futbal gaPageEventElement" data-ga-cat="Sporty" data-ga-action="futbal"> <span class="left-menu-only-large-res">Futbal</span> </a>

10
Ghost

問題は、ヘッドレスクロームのデフォルトのビューボックス(600x800)に要素が実際に表示されないことです。

ヘッドレスブラウザーのウィンドウサイズは、Chromeの起動時に引数として設定する必要があります。私はjavascriptを使用しています(PythonではAPIは同じように見えます):

_var Options = require('Selenium-webdriver/chrome').Options;
var options = new Options();
options.addArguments('headless');
options.addArguments('disable-gpu');
options.addArguments('window-size=1200,1100');

browser = builder.forBrowser('chrome').setChromeOptions(options).build();
_

追加情報

browser.manage().window().setSize(1200,1100);を使用してWebdriverでもウィンドウサイズを設定していますが、このコマンドはヘッドレスクロムでは十分ではありません。ヘッドレスバリアントではこれが機能しています。

11
powerpete

これは、以下の2つの方法で実行できます。

1. chrome optionsでウィンドウサイズを渡すと、以下のようになります(ドライバーインスタンスをインスタンス化する前):

ChromeOptions options = new ChromeOptions()
options.addArguments("headless");
options.addArguments("window-size=1200,1100");
WebDriver driver = new ChromeDriver(options);

2 .インスタンス化後にウィンドウサイズを設定 chromeドライバ:

WebDriver webDriver= new ChromeDriver();
webDriver.manage().window().setSize(new Dimension(1200,1100));
1
LoRe

options.addArguments( 'window-size = 1200,1100');

ヘッドレスで私のために働いたchrome mode :)どうもありがとう@powerpete

以下はヘッドレスの完全な設定ですchrome:-

        ChromeOptions options = new ChromeOptions()
        DesiredCapabilities capabilities = DesiredCapabilities.chrome()
        options.addArguments('headless','disable-gpu','--test-type','--ignore-certificate-errors')
        options.addArguments('window-size=1200,1100');
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(ChromeOptions.CAPABILITY, options)
        driver = {new ChromeDriver(capabilities)}
0

ウィンドウサイズを変更してもうまくいかない場合は、HTMLがヘッドレスモードとヘッドドモードの間で実際に変更されている可能性があります。

同様の問題がありましたが、ヘッドレスはChromeではなくFireFoxで動作しました。 Chrome要素のXpathはヘッドモードでのみ機能しました。HTMLがChromeのヘッドレスモードでわずかに変化していることがわかりました。

Chromeでヘッドレスモードを使用しているときに、Chromeの要素からのXpathをFireFoxの要素からのXpathに置き換えることで、これを修正しました。

0
Jacob Ouellet