レコードを検索してからレコードを更新するスクリプトを作成しています。検索画面で、ユーザーは詳細検索オプションを表示するオプションがあります。詳細検索の表示と非表示を切り替えるには、1つのボタンで制御します。
<a title="Searches" href="javascript:expandFilters()"><img border="0" align="absmiddle" alt="Advanced" src="****MASKED URL****"></a>
高度な検索を表示または非表示にしているときの検索ボタンのプロパティの唯一の違いは、imgsrcです。
高度な検索が非表示の場合、IMGsrcは「/Styles/_Images/advanced_button.jpg」で終わり、高度な検索が表示されている場合、IMGsrcは「/Styles/_Images/basic_button.png」で終わります。
ページを開くと、詳細検索オプションが表示される場合と表示されない場合があります。検索したい値が[詳細]セクションに表示されるので、スクリプトを機能させるためにIFステートメントを追加しました。
<input type="text" value="" maxlength="30" size="30" name="guiSystemID">
IFステートメントは、データを入力する必要のあるフィールドを検索します。フィールドが存在しない場合は、詳細オプションが表示されていないことを示します。ボタンをクリックして検索オプションを展開する必要があります。
次のIFステートメントを作成しました。
if (!driver.findElement(By.name("guiSystemID")).isDisplayed()) {
driver.findElement(By.cssSelector("img[alt='Advanced']")).click();
}
スクリプトを実行して詳細検索を展開すると、スクリプトは正常に実行されます。ただし、スクリプトを実行しても詳細検索が展開されていない場合、スクリプトは失敗し、オブジェクト「guiSystemID」が見つからないことを通知されます。それが見つからない場合は、スクリプトを続行してIFステートメントのTrueパスに入力するため、これはイライラします。
フィールドが見つからないためにスクリプトが失敗することなく、フィールドが表示されているかどうかを評価する方法について、他に何か提案がありますか。
前もって感謝します
サイモン
私はこれに答えるのが遅いかもしれませんが、それは他の誰かが同じものを探しているのを助けるかもしれません。
最近、isDisplayed()の操作中に同様の問題に直面しました。私のコードはこんな感じでした
if(driver.findElement(By.xpath(noRecordId)).isDisplayed() )
{
/**Do this*/
}
else
{
/**Do this*/
}
このコードは、isDisplayedが検索しようとしている要素が存在する場合に非常にうまく機能します。ただし、要素が存在しない場合は、それを探し続けるため、例外「NosuchElementFound」がスローされます。したがって、他の部分をテストする方法はありませんでした。
私はこれを操作する方法を考え出しました({if、else}をtryとcatchブロックで囲み、次のように言います。
public void deleteSubVar() throws Exception
{
try
{
if(driver.findElement(By.xpath(noRecordId)).isDisplayed() )
{
/**when the element is found do this*/
}
}
catch(Exception e)
{
/**include the else part here*/
}
}
お役に立てれば :)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加