WebElementsの探索
Selenium WebDriver接続に基づくテストのためのSenseTalkスクリプトを書くとき、あなたの努力の多くは、テストしているページのDocument Object Model(DOM)のさまざまなHTML要素と対話することに基づいている可能性があります。これらのDOMの要素は、しばしばWebElementオブジェクトと呼ばれます。
SenseTalkには、ページ内のWebElementsを探索するためのさまざまな方法を提供するいくつかのコマンドと関数が含まれています。これにより、あるアクションを行う、情報を見つける、またはそれらの要素に対して検証を行うことができます。
WebElement識別子
DOM内のWebElementにアクセスするには、例えばFindElement()
関数を使用したり、WebDriver接続を持つClick
コマンドを使用したりするとき、対話したい要素を指定するいくつかの方法があります。以下のWebElement識別子は、DOM内の要素を探索するために使用できます:
- webID: このプロパティを使用して、ID属性の値によって要素を探索し ます。
- webName: このプロパティを使用して、Name属性の値によって要素を探索します。
- webTagName: このプロパティを使用して、HTMLタグが指定された値と等しい要素を探索します。
- webClassName: このプロパティを使用して、Class属性の値によって要素を探索します。
- webLinkText: このプロパティを使用して、テキストが指定された値と等しいリンクを探索します。
- webPartialLinkText: このプロパティを使用して、テキストが指定された値を含むリンクを探索します。
- webCssSelector: このプロパティを使用して、指定されたCSSセレクタ表現を使用して要素を探索します。
- webXPath: このプロパティを使用して、XPath表現を使用して要素を探索します。XPathとXPath表現についての情報は、XPath in Selenium WebDriver: Complete Tutorialを参照してください。
WebElementオブジェクト
成功したWebElementの検索は、WebElementオブジェクトを作成します。このオブジェクトには、見つかった要素に関する情報を含むプロパティリストが含まれています。WebElementオブジェクトは以下のリストから任意のプロパティを含むことができますが、すべてのプロパティが必ずしも値を返すわけではありません。特定のWebElementタイプがどのプロパティに有用な値を持つかを決定します。
- Text: ブラウザで表示される要素に含まれる見えるテキスト。
- tagName: 要素のHTMLタグ名。
- Name: 要素のName属性の値。
- ID: 要素のID属性の値。
- Class: 要素のClass属性の値。
- Attribute(): 要素の特定の属性の値を返す、またはその属性が存在しない場合は空になります。
- 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オブジェクトを返します。
WebElementオブジェクトは、呼び出されたときに長い形式または短い形式で表示することができます。つまり、実行の結果ログです。長い形式がデフォルトで、いくつかのプロパティの値が自動的に表示されます。長い形式では、WebElementオブジェクトが表示されるたびにWebDriverサーバーへの追加のリクエストが必要になることに注意してください。
the webElementDisplay
グローバルプロパティ を short
に変更して、短い形式を使用してWebElementsを表示します。現在のページコンテキストで要素が利用できない場合、WebElementオブジェクトはthe WebElementDisplay
が長いに設定されていても短い形式で表示されます。
FindElement
, FindElements
コ マンドと関数
挙動: FindElement
はコマンドまたは関数として呼び出すことができます。それはページ内または別の要素内の特定の要素を見つけます。FindElement
はWebDriverConnectionオブジェクトまたはFindElement
またはActiveElement
プロパティの以前の呼び出しによって返されたWebElementオブジェクトのいずれかで呼び出すことができます。また、WebDriverConnectionオブジェクトやWebElementオブジェクトへの参照なしにFindElement
を呼び出すこともできます。その場合、FindElement
はアクティブなWebDriver接続を使用します。
FindElements
は、コマンドまたは関数として、FindElement
と同じように動作しますが、最初に一致する要素を返すのではなく、見つかったすべての一致する要素を含むリストを返します。
FindElement
がコマンドとして呼び出されると、変数it
はWebElementオブジェクトに設定されます。FindElements
の場合は、WebElementオブジェクトのリストになります。
パラメータ: オプションのWebDriverConnectionオブジェクトと必要なWebElement Identifierを含むプロパティリスト。WebDriverConnectionが指定されていない場合、アクティブな接続が使用されます。
Command Syntax:
FindElement {WebDriver: webDriverName , } IdentifierType: value
FindElement {WebDriver: webDriverName , } IdentifierType: valueFunction Syntax:
FindElement {WebDriver: webDriverName , } IdentifierType: value
FindElement {WebDriver: webDriverName , } IdentifierType: value
返り値: FindElement
の場合、返される値はWebElement objectで、FindElements
の場合はWebElementオブジェクトのリストです。
例:
get FindElement(WebXPath:"//a[@class='search icon-search']") // 指定されたWebXPath識別子と一致するページ上の最初のWebElementを見つける
例:
get FindElements (WebTagName:"input") // HTMLタグ名が'input'のページ上のすべてのWebElementsを見つける
例:
FindElement (WebXPath:"//a[@class='search icon-search']") // 指定されたWebXPath識別子と一致するページ上の最初のWebElementを見つける
例:
FindElements (WebTagName:"input") // HTMLタグ名が'input'のページ上のすべてのWebElementsを見つける
例:
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のプレースホルダー属性が'検索'を含むことをケースセンシティブで確認する
例:
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'stext contains "Mummies" then
MoveTo element // ブラウザのビューにテキスト'Mummies'を含むWebElementオブジェクトを自動的にスクロールする
WaitFor 2, "MummiesHeader" // 画像検索を使用して、ミイラh3要素が期待どおりに見えることを確認する
exit repeat
end if
end repeat
WebElementFound
関数
動作: DOMで指定したWebElementを検索します。要素が見つかった場合、関数はtrue
を返し、見つからなかった場合はfalse
を返します。
パラメータ: 要素が表示されるまでの待ち時間を設定するオプションのWaitFor
プロパティと、必須のWebElement Identifierを含むプロパティリスト。
Syntax:
WebElementFound( identifierType: value {, waitFor: duration} )
例:
put webElementFound (WebID:"gsri_ok0") // ページ上にWebElementが見つかった場合は'true'を返し、見つからなかった場合は'false'を返します。
例:
put WebElementFound(WebClassName:"bb-nav-touts",waitFor:30) // DOMでWebElementが利用可能になるまで最大30秒間待ちます。タイムアウト前に要素が利用可能であれば'true'を、そうでなければ'false'を返します。
例:
if webElementFound(webID:"jkQ") then log "Expected result"
例:
assert that webElementFound(webLinkText:"Request a demo") // ウェブ要素がページ上に見つからない場合、例外がスローされます
例:
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
コマンド
このコード定義では、WebDriver接続に対するWaitFor
コマンドの使用について説明しています。画像ベースのスクリプティングに対するこのコマンドの使用については、Image and OCR Searches: WaitFor Commandを参照してください。
動作: WebElementがDOMに見つかるまで、次のスクリプトの実行を停止します。指定された待ち時間内に要素が見つ からない場合、例外がスローされます。
パラメータ: 待ち時間と1つまたはそれ以上のWebElement Identifiers。待ち時間のデフォルトの単位は秒です。
構文:
WaitFor duration, 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のいずれかが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 objectを返します。これには、見つかったWebElementに関する情報がプロパティリストとして含まれています。すべてのWebElementタイプがすべてのWebElementオブジェクトプロパティの値を返すわけではないことに注意してください。
例:
put foundwebelement()
例:
put the foundWebElement
例:
set myFoundElement to FoundWebElement()
例:
WaitFor 10, webName: "q"
put the foundwebelement's tagName // ウェブ要素のHTMLタグ名を返します。例えば: 'input'
put the foundwebelement's class // ウェブ要素のクラス属性を返します
例:
click (WebLinkText:"Gmail",WaitFor:10)
set GmailLink to FoundWebElement()
log GmailLink's tagName // ウ ェブ要素の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
戻り値: webLocationプロパティリストを返します。これにはobjectType、x、yのプロパティが含まれます。objectTypeは常にwebLocation
であり、xおよびyのプロパティは、WebElementが見つかったウェブページ上の点の座標を表します。例えば:
(objectType:"webLocation", x:"476", y:"83")
例:
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