WebElementの検出
Selenium WebDriver接続に基づき、テスト用のSenseTalk
SenseTalkでは、ページ内のWebElementを様々な方法で特定するための複数のコマンドと関数を用意しており、これらを利用してアクリョンを実行したり、情報を検出したり、このような要素に対して検証を行ったりすることができます。 下記に、以下のコマンドと関数の説明を示します。
- FindElement()、FindElements()関数
- WebElementFound()関数
- WaitForコマンド
- FoundWebElement()関数
- FoundWebLocation()関数
本ドキュメント全体を通じて、以下の基準を構文ボックス内のコード要素を定義するのに使用します。
- 太字:正確に入力する必要がある必須の単語
- イタリック:式または変数要素
- 角括弧[ ]:選択肢のオプションを囲むのに使用します。角括弧内ではいずれか1つのリストを利用できますが、必ず1アイテムを使用する必要があります。リスト内のオプションは縦棒|で区切られます。
- 波括弧{ }:オプションの要素を囲むのに使用します。オプション要素には選択肢を含めることができ、リスト内のアイテムは縦棒|で区切られます。
例:
open file ファイル名{ for [reading | writing | readwrite | appending | updating] }
pattern at {the} [end | ending] of {a | the} word
最初の例では、オプションを示す波括弧の中に一連の選択肢に加えて要素が含まれるため、角括弧が使用されています。 2例目では、2番目の選択肢全体がオプションであるため、(2番目の選択肢に対して)角括弧が省略されています。
WebElement識別子
WebDriver接続でFindElement()関数やClickコマンドを使用する場合など、DOM内のWebElementにアクセスする場合は、やり取りしたい要素を特定するのに複数の方法を利用できます。 DOM内の要素を特定するのに、以下のWebElement識別子を利用できます。
- webID:本プロパティを利用して、そのID属性の値によって要素を特定できます。
- webName:本プロパティを利用して、その名前属性の値によって要素を特定できます。
- webTagName:本プロパティを利用して、そのHTMLタグが所定の値と等しい要素を特定できます。
- webClassName:本プロパティを利用して、そのクラス属性の値によって要素を特定できます。
- webLinkText:本プロパティを利用して、そのテキストが指定された値と等しいリンクを特定できます。
- webPartialLinkText:本プロパティを利用して、そのテキストが指定された値を含むリンクを特定できます。
- webCssSelector:本プロパティを利用して、指定されたCSSセレクタ式を使用している要素を特定できます。
- webXPath:本プロパティを利用して、XPath式によって要素を特定できます。 XPathとXPath式に関する詳細は、Selenium WebDriverにおけるXPath:完全な手引きを参照してください。
WebElementオブジェクト
正常なWebElement検索によってWebElementオブジェクトが作成されます。 本オブジェクトには、検出された要素に関する情報を含むプロパティリストが含まれます。 WebElementオブジェクトには、以下のリストの任意のプロパティを含めることができますが、すべてのプロパティが必ず値を返すわけではありません。 どのプロパティが役に立つ値を持っているかは、特定のWebElementの種類によって決定されます。
- Text:ブラウザ内に表示される要素に含まれる可視化されたテキスト。
- tagName:要素のHTMLタグ名。
- Name:要素の名前属性の値。
- ID:要素のID属性の値。
- Class:要素のクラス属性の値。
- Attribute():要素の特定の属性の値を返します(属性が存在しない場合はemptyとなります)。
- isSelected:TrueまたはFalseを返し、要素がブラウザ内で選択されているかどうかを示します。
- isEnabled:TrueまたはFalseを返し、要素がブラウザ内で有効かどうかを示します。
- isDisplayed:TrueまたはFalseを返し、要素がブラウザ内で表示されているかどうかを示します。
- Origin:ページ内における要素の起点(左上隅)のwebLocationプロパティリストを返します。 例:(objectType:"webLocation", x:"262", y:"323")
- Size:ページ内の要素のサイズ(幅、高さ)を返します。
- Rectangle:ページ内の要素の矩形(x1, y1, x2, y2)を返します。 これらはブラウザの座標であり、画面の座標ではないことに注意してください。
- cssProperty:要素の指定されたCSSプロパティの値を返します。
- WebDriver:要素を含むWebDriver接続に関するWebDriverConnectionオブジェクトを返します。
- WebContext:要素を含むWebDriver接続に関するWebDriverConnectionオブジェクトか、内部で所定の要素が検出されたWebElementオブジェクトのいずれかを返します。
FindElement、FindElementsコマンドおよび関数
挙動:FindElementは、コマンドと関数のいずれかとして呼び出すことができます。 本コマンドまたは関数は、ページ内または別の要素内の特定の要素を特定します。 FindElementは、以前のFindElementプロパティ またはActiveElementプロパティ の呼び出しによって返された、WebDriverConnectionオブジェクト上またはWebElemenオブジェクト上のいずれかで呼び出すことができます。
FindElementsは、コマンドまたは関数としてFindElementと全く同じように機能しますが、最初にマッチングした要素を返す代わりに、検出されたすべてのマッチング要素を含むリストを返します。
パラメータ:オプションのWebDriverConnectionオブジェクトと必須のWebElement識別子を含むプロパティリスト。 WebDriverConnectionを指定しない場合は、アクティブな接続が使用されます。
構文:
コマンドの場合:
FindElement WebDriver: "webDriver名",識別子タイプ: "Value"
FindElements WebDriver: "webDriver名",識別子タイプ: "Value"
関数の場合:
get FindElement(WebDriver: "webDriver名", 識別子タイプ: "Value")
get FindElements(WebDriver: "webDriver名",識別子タイプ: "Value")
戻り値:返される値は、FindElementについてはWebElementオブジェクト、FindElementsについてはWebElementオブジェクトのリストとなります。
例:
get FindElement(WebXPath:"//a[@class='search icon-search']") // 指定されたWebXPath識別子と一致する最初のWebElementをページ上で特定します
例:
get FindElements (WebTagName:"input") //「input」というHTMLタグ名を持つすべてのWebElemenをページ上で特定します
例:
FindElement (WebXPath:"//a[@class='search icon-search']") // 指定されたWebXPath識別子と一致する最初のWebElementをページ上で特定します
例:
FindElements (WebTagName:"input") // 「input」というHTMLタグ名を持つすべてのWebElementをページ上で特定します
例:
set NarrowSearch to FindElement(WebID:"narrow-search") // WebElementオブジェクトを変数「NarrowSearch」に割り当てます
例:
FindElement (WebXPath:"//a[@class='search icon-search']")
put it into myElement // 検出されたWebElementオブジェクトを変数「myElement」に格納します
例:
FindElement (WebLinkText:"Guides and References")
MoveTo it // FindElementによって検出されたWebElementオブジェクトをスクロールし、ブラウザ内で表示させます
WaitFor 3, "GuidesandReferences_Link_Highlighted" // リンクテキストが想定通り表示され、ハイライトされていることを画像検索を利用して確認します
Click it // WebElementオブジェクトをクリックします
例:
put FindElement(WebID:"s") into SearchField
assert that SearchField's attribute("placeholder") contains "search" considering case with warning // 大文字と小文字を区別する検証を実施し、検出されたWebElementのプレースホルダー属性に「search」が含まれるかどうか確認します
例:
put findelement(webID: "twotabsearchtextbox") into SearchBox
click SearchBox
sendkeys "Roger Rabbit"
submit
例:
FindElement (WebID:"s")
set SearchField to it // FindElement()関数によって作成されたWebElementオブジェクトを変数「SearchField」に割り当てます
log SearchField's tagName // 要素のHTMLタグ名を記録します。 (例:「input」)
assert that SearchField's origin's x is less than 100 // WebElementオブジェクトの左上隅がブラウザの座標面の100ピクセル未満下方に存在するか検証します
SendKeys SearchField, "network emulation"
例:
get FindElements(webTagName:"h3")
log "There are" && the number of items of it && "h3 elements."// FindElements()によって作成されたWebElementオブジェクトの数を示すメッセージを記録します。 例:「There are 6 h3 elements.」
例:
set elementsList to FindElements(webTagName:"h3") // HTMLタグ名が「h3」のすべての存在するWebElementオブジェクトのリストを格納します
repeat with each element in elementsList //変数「elementsList」に格納されている各WebElementオブジェクトを反復処理します
if element's text contains "Mummies" then
MoveTo element // テキスト「Mummies」を含むWebElementオブジェクトを自動でスクロールし、ブラウザ上に表示させます
WaitFor 2, "MummiesHeader" // 画像検索を使用して、Mummiesのh3要素が想定通りに表示されているか確認します
exit repeat
end if
end repeat
WebElementFound()関数
挙動:DOMにおいて、所定のWebElementを検索します。 本関数は、WebElementが検出された場合はtrueを返し、検出されない場合はfalseを返します。
パラメータ:必須のWebElement識別子と、WebElementが表示されるまでの待ち時間を設定するオプションのWaitForプロパティを含むプロパティリスト。
構文:
WebElementFound(識別子タイプ: "value"{, waitFor:期間})
例:
put webElementFound (WebID:"gsri_ok0") // ページ上でWebElementが検出されたら「true」、検出されなかったら「false」が返されます
例:
put WebElementFound(WebClassName:"bb-nav-touts",waitFor:30) // WebElementがDOM内で利用可能になるまでに最長30秒要します。 WebElementがタイムアウト前に利用可能になれば「true」、ならなければ「false」が返されます。
例:
if webElementFound(webID:"jkQ") then log "Expected result"
例:
assert that webElementFound(webLinkText:"Request a demo") // WebElementをページ上で検出できなければ例外が投げられます
例:
if webElementFound(webLinkText:"Request a demo") and imageFound(text:"Request a demo") then // リンクテキストがDOM内に存在し、ページ上で可視化されているかチェックします
LogSuccess "'Request a demo' checkpoint has passed. The link text is correct in the DOM and the text appears on the UI."
else
LogError "'Request a demo' checkpoint has failed."
end if
WaitForコマンド
挙動:DOM内でWebElementが検出されるまで、スクリプトの次の行の実行を一時停止します。 指定された待ち時間内にWebElementが検出されなければ、例外が投げられます。
パラメータ:待ち時間と1つ以上のWebElement識別子。 待ち時間は、デフォルトでは秒単位です。
構文:
WaitFor 期間, WebElement
例:
WaitFor 10, (WebID:"narrow_search") // 指定したIDがDOM内で利用可能になるまで最長10秒待機します
例:
WaitFor 1 minute, WebLinkText:"Privacy" // 指定したリンクテキストがDOM内で利用可能になるまで最長1分待機します
例:
WaitFor 10, (WebID:"narrow_search"), (WebID:"twotabsearchtextbox") // 指定した2つのWebElementのうちどちらか1つがDOM内でアクセス可能になるまで最長10秒待機します
例:
WaitFor 10, (WebXPath:"//strong[@data-ng-bin='vm.formatLocationName(location)']"), (image:"LocationBasedHeader") // 指定したWebElementがDOM内でアクセス可能になるか、画像がSUT上で検出されるまで、最長10秒待機します
FoundWebElement()関数
挙動:本関数は、最後に検出されたWebElementに関する情報を提供します。
パラメータ:なし(一番最後に検出されたWebElementを参照します)。
構文:
FoundWebElement()
the FoundWebElement
戻り値:検出されたWebElementに関する情報のプロパティリストを含むWebElementオブジェクト。 すべてのタイプのWebElementが、各WebElementオブジェクトプロパティの値を返すわけではないことに注意してください。
例:
put foundwebelement()
例:
put the foundWebElement
例:
set myFoundElement to FoundWebElement()
例:
WaitFor 10, webName: "q"
put the foundwebelement's tagName // WebElementのHTMLタグ名を返します。 (例:「input」)
put the foundwebelement's class // WebElementのクラス属性を返します
例:
click (WebLinkText:"Gmail",WaitFor:10)
set GmailLink to FoundWebElement()
log GmailLink's tagName // WebElementのHTMLタグ名を記録します。 例:「a」
例:
WaitFor 10, (WebID:"twotabsearchtextbox")
log foundwebelement()'s class
例:
set LinkList to ("About","Store","Gmail","Images")
repeat with each Link of LinkList
WaitFor 5, WebLinkText:Link // 想定したWebElementがリンクテキストに基づいてDOM内に存在することを確認します
assert that foundWebElement()'s rectangle's height is 15 with warning // 現在のWebElementオブジェクトの高さが15ピクセルであるかどうか検証します
end repeat
FoundWebLocation()関数
挙動:本関数は、ブラウザ内のWebElementの場所に関する情報を返します。
パラメータ:なし(一番最後に検出されたWebElementを参照します)。
構文:
FoundWebLocation()
the FoundWebLocation
戻り値:objectType、xおよびyプロパティを含むwebLocationのプロパティリスト。 objectTypeは常にwebLocationであり、xおよびyプロパティは、WebElementが検出されたウェブページ上の点の座標を表します。 例:
例:
put foundWebLocation()
例:
put the foundWebLocation
例:
WaitFor 10, (WebID:"twotabsearchtextbox")
log foundweblocation() // 既に検出されているWebElementのwebLocationのプロパティリストを記録します。 例:「(objectType:"webLocation", x:"463", y:"340")」
例:
WaitFor 10, webName:"q"
set YCoord to the foundWebLocation's y // WebElementのブラウザ位置のy座標を変数「YCoord」に格納します
例:
If WebElementFound(webName:"q") then // 指定したWebElementがDOM内でアクセス可能であるかどうかチェックします
Click the foundWebLocation // WebElementがアクセス可能であれば、それをクリックします
end if