2017-05-09 5 views
0

誰かが私のコードに間違っていることについて提案していますか?ここでは、コードがあります:私はテストを実行するとbehatは不可視フィールドと対話できません

 echo $this->find("css","#address-container")->getHtml(); 
    $field = $this->find("css","#address-container .region input"); 
    echo $field->isVisible() ? "I can see myself!!!" : "no can not see"; 
    echo $field->getAttribute('type'); 
    $field->setValue("ON"); 

、これは私が#address-container .region inputが表示されるように期待していた結果

│   <legend>Address</legend> 
    │   <div class="field city"> 
    │   <label>*City</label> 
    │   <input class="required city" name="address_add[0][city]" value="" type="text"> 
    │   </div> 
    │   <div class="field region"> 
    │   <label>*Prov./State</label> 
    │   <input class="required region" name="address_add[0][region]" value="" type="text"> 
    │   </div> 
    │   <div class="field country"> 
    │   <label>*Country</label> 
    │   <input class="required country" name="address_add[0][country]" value="" type="text"> 
    │   </div> 
    │  no can not seetext 
    Element is not currently visible and so may not be interacted with 
    Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03' 
    System info: host: 'ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.15-x86_64-linode81',           java.version: '1.8.0_121' 
    Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible) 

です。ブラウザに行って手作業で手順を進めると、領域フィールドが表示されます。私がチェックし、他のものです:

  • 私は都市や国と地域を交換する場合は、ページ
  • には、他の領域の入力フィールドが存在しない、すべてが正常に動作し
  • 地域を操作全く遅延javascriptの呼び出しはありません入力フィールド

他に、領域フィールドを非表示にする原因は何ですか?この問題のトラブルシューティングに役立つツールがありますか?私はこのような地域や国のhtmlの位置を入れ替えた場合

UPDATE

は:

│   <div class="field country"> 
    │   <label>*Country</label> 
    │   <input class="required country" name="address_add[0][country]" value="" type="text"> 
    │   </div> 
    │   <div class="field region"> 
    │   <label>*Prov./State</label> 
    │   <input class="required region" name="address_add[0][region]" value="" type="text"> 
    │   </div> 

は、次に領域が見えるようになります。しかし、国を探すために私の行動コードを変更すれば、今は見えない国です!

本当のブラウザでは見えない何か違うものを見ていますか?

+0

ブラウザでinspectを使用してこのセレクタを検索し、1つの要素を返すかどうかを確認してください。待ち時間を追加する必要があるかもしれませんが、最初に 'sleep(2);'のようなブラインドウェイトを使用してテストし、条件付き待ちを追加することができます。 #アドレスコンテナフォーム全体のHTMLスニペットを入力してください。 – lauda

+0

ありがとうlauda。私はちょうど私の質問を更新した。地域と国のhtmlノードの順序を逆にすると、領域は表示され、国は表示されません。私のウェブブラウザで人間の目を通して物を見ると、私はそれらが見えるのを見ることができます...おかしい – John

+0

'#address-container input.region'や'#address-container input [name * = region] ' – lauda

答えて

0

セレンの解像度は800x600です。そのため、要素は実際にはビューポートから実際に外れていました。モニターの解像度を1366x768に上げると、すべて正常に機能しました。私はセレンのスクリーンショットを使ってこれをデバッグすることができました。

0

まず、問題はSeleniumに関するものです(ドライバとして使用しているため、Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible))。

Seleniumでは、ブラウザで表示されている動作とは動作が異なる場合があります。小さな遅延を追加してみてください。私はsleep(1)か何かもっと賢いことができます。

本当に多くの問題は、ロード後すぐにページにアクセスしようとしているという事実に由来しています(いくつかのJSがまだ終了していない場合)。

関連する問題