2017-01-02 17 views
2

ページ上に既存のJavaScript関数を呼び出そうとしていますが、取得できません。Selenium:ページのJavaScript関数を呼び出す

これは私が持っている要素である:

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
js.ExecuteScript("document.f2.submit()"); 

例外::私は通常、この操作を実行するにはどうすればよい

unknown error: Cannot read property 'submit' of undefined 
(Session info: chrome=55.0.2883.87) 
(Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 6.1.7601 SP1 x86_64) 

<area shape="rect" coords="513,0,580,66" href="#" onclick="document.f2.submit();"> 

これは呼び出しているのですか?

+0

スクリプトは実行されていますが、document.f2は何も指していないようですが、ブラウザで実行されたときにその部分が動作することを確認してください。 – acontell

+0

はい、私はクロームコンソールでテストして、正常に実行しました –

+0

それはあなたが 'js.ExecuteScript(" setTimeout(function(){document.f2.submit();}、1000) ); '?考え方は、すべてが「適切」であることを保証するためにしばらくしてからスクリプトを実行することです。 – acontell

答えて

2

スクリプトが早すぎて実行され、ページ内の一部の要素がまだ存在しない(エラーが発生している)場合があります。

これらのケースで最も良いことは、それが実際に問題であることを判断するためにしばらく時間が経過した後にスクリプトを実行することです。

js.ExecuteScript("setTimeout(function() { document.f2.submit(); }, 1000);"); 

問題は本当にタイミングであることを確認した後、次にすることは、要素がページにあるようにスクリプトインジェクションを実行する際に把握されており、何ら問題はありません(したがって、あなたがsetTimeoutメソッドを削除することができます最初に実行したい操作だけを残してください)。

関連する問題