2017-04-10 12 views
1

Webアプリケーションのテストを設定しようとしています - DockerとPHPUnit 5.7.19にVNCを備えたSelenium standalone 3.2サーバがあります。PHPUnitが存在しない場合に例外をスローする

しかしライン

$this->webDriver->findElement(WebDriverBy::xpath($main_button_xpath))->click(); 

が時々スロー(時にはそれはない)、それはいけません例外 - 私はVNCを経由して、それを見ていると、ターゲットボタンが見られ、画面上に存在していましたそれはまだ例外を投げた。これらのエラーは、私がSeleniumサーバーを2.57からアップグレードしてから表示され始めました。

改善やデバッグの方法がありますか?

非常

ありがとうEDIT:例外

The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed. 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html 
Build info: version: '3.2.0', revision: '8c03df6', time: '2017-03-02 09:34:51 -0800' 
System info: host: 'dbcbaf52ae71', ip: '172.17.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-514.10.2.el7.x86_64', java.version: '1.8.0_121' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{moz:profile=/tmp/rust_mozprofile.JUP1ydgC8zCR, rotatable=false, timeouts={implicit=0, page load=300000, script=30000}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=52.0, platformVersion=3.10.0-514.10.2.el7.x86_64, moz:processID=17210, browserName=firefox, platformName=linux}] 
Session ID: 47bf2157-c7a8-47ea-a82a-3ab3ddd0ee61 
+0

実際の例外メッセージとスタックトレースの例はありますか? – segFault

+0

@segFaultは例外を追加しました –

答えて

0

あなたは次のようになめらかにやってみたのですか?

$wait = new \Facebook\WebDriver\WebDriverWait($driver, 5, 250); 
$condition = \Facebook\WebDriver\WebDriverExpectedCondition::presenceOfElementLocated(Facebook\WebDriver\WebDriverBy::xpath($main_button_xpath)); 

$btn = $wait->until($condition); 
$btn->click(); 

UPDATE:下記掲載のような反復試行を行うには

アプローチがなめらかに見ることができます。それでも私はこれがちょうどかもしれないと信じますは、ページ上で何が起こっているかによって助けます。

$limit = 20; // might be different 
$staleException = NULL; 

for($i = 1; $i <= 20; $i++){ 
    try{ 
     // assuming $webDriver is ready to use and $main_button_xpath, too 
     $webDriver->findElement(WebDriverBy::xpath($main_button_xpath))->click(); 
     $staleException = NULL; 
     break; 
    } catch (\Facebook\WebDriver\Exception\StaleElementReferenceException $ex) { 
     $staleException = $ex; 
     usleep(250000); // 250 milliseconds wait 
    } 
} 

if($staleException){ 
    throw $staleException; 
} 

あなたのコメントに答えています:はい、それは清潔できちんとしたコードの清潔感の適切な解決策はないと信じています。このような種類のものを避けるためには、どのような防衛戦略を選択するかを理解するために、ページ上でHTMLやJSを使って何が起こっているかについて、これらのやや低いレベルの詳細を知っておく必要があります。私は起こっているそれぞれのトリッキーなもの(またはトリッキーなタイプのもの)のための戦略の束を除いて、別の「普遍的な解決策」があるとは思わない。

+0

が試行しますが、なぜこれが起こっていますか?これは、例外の詳細に関するアップデートを3.2 –

+0

に更新する直前に完全に機能しました。私は '待機'能力が問題を解決しないと思う。それは要素を見つけるが、その後それを緩めるように見えます。ページ上の任意の複雑なJS? – xmike

+0

はい、それはPHPとJSで書かれたCRMソフトウェアです –

関連する問題