2016-06-28 11 views
0

私は次の例を示します。ここでは、選択したレポートによってフィールドが表示されるかどうかが示されます。Selenium WebDriverを使用して動的IDを持つフィールドを検索するc#

By Field1 = By.Id("ctl00_MainContent_cntrlDynamicField1"); 
By Field2 = By.Id("ctl00_MainContent_cntrlDynamicField2"); 
By Field3 = By.Id("ctl00_MainContent_cntrlDynamicField3"); 

HTML::

<table> 
<tbody> 

<tr> 
    <td> 
     <span>Field1</span> 
    </td> 
    <td> 
     <select id="ctl00_MainContent_cntrlDynamicField1" 
      <option value="1">Yes</option> 
      <option value="0">No</option> 
     </select> 
    </td> 
</tr> 

<tr> 
    <td> 
     <span>Field2</span> 
    </td> 
    <td> 
     <select id="ctl00_MainContent_cntrlDynamicField2" 
      <option value="1">Yes</option> 
      <option value="0">No</option> 
     </select> 
    </td> 
</tr> 

<tr> 
    <td> 
     <span>Field3</span> 
    </td> 
    <td> 
     <select id="ctl00_MainContent_cntrlDynamicField3" 
      <option value="1">Yes</option> 
      <option value="0">No</option> 
     </select> 
    </td> 
</tr> 

</tbody> 
</table> 

私が選択した場合(第1報)

1) Then all Fields are displayed 
2) Field 1: (id="ctl00_MainContent_cntrlDynamicField1") 
3) Field 2: (id="ctl00_MainContent_cntrlDynamicField2") 
4) Field 3: (id="ctl00_MainContent_cntrlDynamicField3") 

私が選択した場合は(レポートセレンコードフィールドで

は次のように定義されています3)

1) Then Field 2 is removed (id="ctl00_MainContent_cntrlDynamicField2") 
2) As only 2 Fields are now displayed on the screen the ID's are now as follows 
3) Field 1: (id="ctl00_MainContent_cntrlDynamicField1") 
4) Field 3: (id="ctl00_MainContent_cntrlDynamicField2") 

フィールド3を使用したいのにIDは変更されているため、自動化は常に失敗します。

セレンスクリプトは、xlsシートからデータ駆動型です。

IDが動的に変更されても、引き続きフィールド3を見つけることができます。

答えて

0

<td><span>Field3</span></td>は、正しいオブジェクトを指し示すfor属性のラベルではありません。その場合、テキストラベルに基づいて識別することができます。

この周りの2つの方法があります:セレンwebdriverをがIJavascriptExecutorあるので、あなたの要素を見つけるために、jQueryのを使用するか...あなたが具体的かつ使用してテキストとスパンを見つけることができる: http://www.w3schools.com/jquery/traversing_closest.asp

他のオプションは使用By.CssSelectorですBy.Idではなく、ブラウザによっては隣接するCSSセレクタを使用できる可能性があります。 https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_selectors

0

以下のコードは各テーブル行を取得し、「Field3」というテキストを検索します。そのテキストが見つかると、その行からSELECTを取り出し、変数selectに格納します。

String searchText = "Field3"; 
List<WebElement> rows = driver.findElements(By.tagName("tr")); 
for (WebElement row : rows) 
{ 
    if (row.getText().contains(searchText)) 
    { 
     Select select = new Select(row.findElement(By.tagName("select"))); 
     break; 
    } 
} 
関連する問題