2017-05-13 7 views
1

私はSeleniumで遊んでいて、問題が発生しました。私は要素が存在しない場合、テストを続行することに問題があります。要素が存在しない場合はテストを続行してください(try catchを使用)

これは私のPHPコード

if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl05_liPage') != false) { 
    $nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl05_liPage'); 
} 
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl04_liPage') != false) { 
    $nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl04_liPage'); 
} 
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl03_liPage') != false) { 
    $nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl03_liPage'); 
} 
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl02_liPage') != false) { 
    $nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl02_liPage'); 
} 
if ($this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl01_liPage') != false) { 
    $nrOfPages = $this->seePageHasElement('ctl00_cphMain_ResultsPager_repPager_ctl01_liPage'); 
} 

function seePageHasElement($id) 
    { 
     try { 
      $element = $this->webDriver->findElement(WebDriverBy::id($id)); 
     } catch (\PHPUnit_Framework_AssertionFailedError $f) { 
      return false; 
     } 
     return $element; 
    } 

であり、これは誤りであるセレンサーバから

There was 1 error: 

1) MyTests::testSpiderThat 
Facebook\WebDriver\Exception\NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"ctl00_cphMain_ResultsPager_repPager_ctl05_liPage"} 
    (Session info: chrome=58.0.3029.110) 
    (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 40 milliseconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' 
System info: host: '123123', ip: '172.18.11.210', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_77' 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.29.461591 (62ebf098771772160f391d75e589dc567915b233), userDataDir=C:\Users\myComp\AppData\Local\T 
emp\scoped_dir5528_32323}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=58.0.3029.110, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, loc 
ationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}] 
Session ID: 7220150b6e8bdc6a539de93f2771bf78 
*** Element info: {Using=id, value=ctl00_cphMain_ResultsPager_repPager_ctl05_liPage} 

そこで問題は、適切に要素が存在しない場合は、このエラーを抑制/スキップする方法ですか?私はテストを続行したいが、それはちょうど停止する...おそらくセレンのスタンドアロン版に問題がある? 追加情報が必要な場合は、お知らせください。ありがとう

+0

私はSeleniumについて何も知らないけど、間違ったタイプの 'Exception'をキャッチしようとしています。つまり' PHPUnit_Framework_AssertionFailedError'です。しかし、スローされた 'Exception'は' .. \ NoSuchElementException'型です。したがって、後者が前者を拡張しない限り、 '.. \ NoSuchElementException'(あるいは同様に)、あるいはもっと一般的な' Exception'をキャッチする必要があります。 –

答えて

1

使用している方法は私が自分自身を使用する方法と非常によく似ています。私はCodeceptionフレームワークを使用しています。これにより、Seleniumの書き込みテストがより簡単になりました。 Codeceptionで

、それがページに表示されている場合にのみ、要素の値を取得するには、これは私のために正常に動作します:

if($I->seePageHasElement(['id' => 'my_first_element_id'])) { 
    $nrOfPages = $I->grabTextFrom(['id' => 'my_element_id']); 
} 

public function seePageHasElement($element) 
{ 
    try { 
     $this->getModule('WebDriver')->seeElement($element); 
    } catch (\PHPUnit_Framework_AssertionFailedError $f) { 
     return false;   
    } 
    return true; 
} 

あなたがCodeceptionを使用していない場合は、多分あなたはメソッドを書き換える必要がありますあなたは、テストが失敗する場合、一方

public function seePageHasElement($element) 
{ 
    try { 
     $this->webDriver->seeElement($element); 
    } catch (\PHPUnit_Framework_AssertionFailedError $f) { 
     return false; 
    } catch (\NoSuchElementException $f) { 
     return false; 
    } catch (\Exception $f) { 
     return false; 
    } 
    return true; 
} 

を、ちょうど停止するテストを望んでいない。このようなものに(あなたが同時に例外の種類をキャッチしようとすることができることに注意してください) 、再びコードシップが救助に来る。すべてのsee()メソッドには対応するcanSee()メソッドがあります。 canSee()メソッドではテストは失敗しますが、実行は停止しません。

+0

良い仕事の男...助けのためのthx –

+0

あなたを大歓迎です! – sunomad

関連する問題