Python用のセレン。 第4章アイテムの検索

PythonのSelenium非公式ドキュメントの翻訳の継続。
バイジュムツカダンの許可を得て翻訳。
オリジナルはこちらにあります

内容:


1. インストール
2. 最初のステップ
3. ナビゲーション
4.検索要素
5. 期待
6.ページオブジェクト
7. WebDriver API
8.付録:よくある質問

4.アイテムを検索する


ページ上のアイテムを検索する方法はいくつかあります。 特定のタスクに最適なものを使用する権利があります。 Seleniumは、ページ上のアイテムを検索するために次のメソッドを提供します。


検索条件を満たすすべてのアイテムを検索するには、次のメソッドを使用します(リストが返されます)。


[お気づきかもしれませんが、2番目のリストにはIDによる検索はありません。 これは、HTML要素のidプロパティによるものです。ページ要素識別子は常に一意です。 -注 あたり。]

上記のパブリックメソッドに加えて、ページオブジェクトへのポインターを知っている場合、find_elementおよびfind_elementsという非常に役立つ2つのプライベートメソッドがあります。

使用例:

from selenium.webdriver.common.by import By driver.find_element(By.XPATH, '//button[text()="Some text"]') driver.find_elements(By.XPATH, '//button') 

Byクラスでは、次の属性を使用できます。

 ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector" 

4.1。 IDで検索


要素のIDがわかっている場合、このメソッドを使用します。 指定されたid値に一致する要素がない場合、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> </form> </body> <html> 

フォーム要素は次のように定義できます。

 login_form = driver.find_element_by_id('loginForm') 

4.2。 名前で検索


要素の名前属性がわかっている場合、このメソッドを使用します。 結果は、name属性の目的の値を持つ最初の要素になります。 指定された名前の値に一致する要素がない場合、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html> 

ユーザー名とパスワードを持つ要素は、次のように定義できます。

 username = driver.find_element_by_name('username') password = driver.find_element_by_name('password') 

次のコードは、「クリア」ボタンの前に「ログイン」ボタンを受け取ります。

 continue = driver.find_element_by_name('continue') 

4.3。 XPath検索


XPathは、XMLドキュメントツリー内のノードの検索に使用される言語です。 HTMLはXML(XHTML)に基づいている可能性があるため、Seleniumユーザーには、この強力な言語を通じてWebアプリケーションの要素を検索する機会が与えられます。 XPathは、idまたはname属性の単純な検索方法を超えて(同時にそれらをサポートします)、たとえばページ上の3番目のチェックボックスの検索など、さまざまな新機能を開きます。

XPathを使用する正当な理由の1つは、受け取る要素のIDや名前などのポインターに適した属性を自慢できない場合です。 XPathを使用して、絶対パス(推奨されません)または相対パス(指定されたIDまたは名前の要素)のいずれかで要素を検索できます。 XPathポインターを使用して、idとname以外の属性を使用して要素を定義することもできます。

絶対XPathパスには、ルート(html)から必要な要素までのすべてのツリーノードが含まれているため、ページのソースコードをわずかに調整した結果、エラーが発生しやすくなります。 idまたはname属性を持つ親要素(理想的には親要素の1つ)が見つかった場合、親子関係を使用して、探している要素を特定できます。 これらのリンクははるかに安定しており、ページのソースコードの変更に対するテストの耐性を高めます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html> 

フォーム要素は、次の方法で定義できます。

 login_form = driver.find_element_by_xpath("/html/body/form[1]") login_form = driver.find_element_by_xpath("//form[1]") login_form = driver.find_element_by_xpath("//form[@id='loginForm']") 

  1. 絶対パス(HTMLページの構造のわずかな変更で中断します)
  2. HTMLページの最初のフォーム要素
  3. id名とloginForm値で属性が定義されているフォーム要素

ユーザー名要素は次のようにあります。

 username = driver.find_element_by_xpath("//form[input/@name='username']") username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]") username = driver.find_element_by_xpath("//input[@name='username']") 

  1. 名前の名前とユーザー名の値で属性が定義されている入力の子要素を持つ最初のフォーム要素
  2. id要素とloginFormで属性が定義されているフォーム要素の最初の子入力要素
  3. 名前nameおよびユーザー名値で属性が定義される最初の入力要素

「クリア」ボタンは、次の方法で見つけることができます。

 clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']") clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]") 

  1. 名前nameと値continueを持つ属性が設定されている入力要素、および名前タイプとボタン値を持つ属性
  2. フォーム要素の4番目の子入力要素。名前idおよび値loginFormを持つ属性が設定されます

提示された例は、XPathの使用の基本の一部をカバーしています。より詳細な調査のために、以下の資料をお勧めします。


XPath要素の把握に役立つ非常に便利なアドオンもいくつかあります。


4.4。 ハイパーリンクテキストでハイパーリンクを検索する


アンカータグ内のテキストがわかっている場合にこのメソッドを使用します[アンカータグ、アンカータグ、アンカータグ-タグ-注。 トランス。]。 このメソッドを使用して、目的のタグテキスト値を持つ最初の要素を取得します。 検索値を満たすアイテムがない場合、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <p>Are you sure you want to do this?</p> <a href="continue.html">Continue</a> <a href="cancel.html">Cancel</a> </body> <html> 

アドレス「continue.html」を持つハイパーリンク要素は、次のようにして取得できます。

 continue_link = driver.find_element_by_link_text('Continue') continue_link = driver.find_element_by_partial_link_text('Conti') 

4.5。 タグでアイテムを検索


タグで要素を検索する場合は、このメソッドを使用します。 このようにして、指定されたタグ名を持つ最初の要素を取得します。 検索で結果が返されない場合、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html> 

ヘッダー要素h1は次のように見つかります。

 heading1 = driver.find_element_by_tag_name('h1') 

4.6。 クラスごとにアイテムを検索する


class属性の値で要素を見つけたい場合にこのメソッドを使用します。 このようにして、目的のクラス名を持つ最初の要素を取得します。 検索が失敗すると、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <p class="content">Site content goes here.</p> </body> <html> 

「p」要素は次のように見つけることができます。

 content = driver.find_element_by_class_name('content') 

4.7。 CSSセレクターによる要素の検索


CSSセレクターの構文を使用して要素を取得する場合は、このメソッドを使用します[CSSセレクターは、要素/ HTML要素への相対パスの正式な説明です。 古典的に、セレクタはスタイルルールを設定するために使用されます。 WebDriverの場合、ルール自体は必要ありません。Webドライバーは検索にのみCSS構文を使用します-注 トランス。]。 このようにして、CSSセレクターに一致する最初の要素を取得します。 CSSセレクタに一致する要素がない場合、NoSuchElementExceptionがスローされます。

たとえば、次のページのソースコードを考えます。

 <html> <body> <p class="content">Site content goes here.</p> </body> <html> 

「p」要素は次のように定義できます。

 content = driver.find_element_by_css_selector('p.content') 

Sauce Labsには、 優れた CSSセレクタドキュメントがあります
翻訳者から:次の資料を参照することもお勧めします。


次の章に進む

Source: https://habr.com/ru/post/J250975/


All Articles