2012-03-15 19 views
1

JavaクラスでSelenium WebDriverを使用して、特定の要素を見つけようとすると、入力要素に必要な量の要素が自動的に追加されます。Selenium WebDriverで使用するHTML要素の検索

私はHTMLテーブルを持っています。各行は要素のタイプと、特定の行の要素の量にXを追加するために使用される入力フィールドを指定しています。

<tr> 
    <td class="non-sortable-table"> 
    <input class="required text" type="text" value="0" name="plate_order{pageFlow.plateorders[0].numberOfPlates}" tabindex="25"> 
    </td> 
    <td class="non-sortable-table"> 
    <span>20% - White plates</span> 
    </td> 
    ... 
</tr> 

私はその要素を取得するために私のJavaコードに次のように試みたが、運としている:

WebElement element = (WebElement) js.executeScript("return ${\"document.getElementsByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')\""); 

WebElement element = driver.findElement(By.ByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')) 

私はその入力を編集するために、その要素を盗んできますか? 要素の名前の一部がコントローラへの参照である場合、つまりpageFlowは可能ですか?私は20%で識別される次の要素....

を検索したい場合

は何私は運でXPathとcssSelectorを使用して、その1を取得しようとしています。 提案がありますか?

+1

"tr/td [@ class = 'non-sortable-table'] [2]/span" – faramka

答えて

2

XPathまたはCSSでstarts-withタイプの演算子を使用したいと思われるようです。その後、

XPath: //span[starts-with(., '20%')] 
CSS/Sizzle*: span:contains('20%') 

テキストがわからない場合は、何かこの:

ような何か:

XPath: //input[starts-with(@name, 'plate_order')] 
CSS: input[name^='plate_order'] 

(あなたがテキストを知っていれば)類似のものはあまりにも、スパンのために働く必要がありますがxpathが機能するかもしれません。ザ・関数が含まれてい

XPath: //input[starts-with(@name, 'plate_order]/../../td/span 

* は、純粋なCSSではありません。これは、Sizzleライブラリによって提供される追加機能です。これは、Seleniumが組み込みのCSSライブラリを使用しているのか、Sizzleを注入しているのかによって、機能しない場合があります。 JavaScriptの結果から要素を返すために

+0

エレガントで、始まりは私がここで必要とするものです。それにもかかわらず、私は 'String [] elements = driver.findElement(By.xpath(" // table/tbody "))を使用することを選択しました。getText()。split(" \\ n ");' getTextは単にテーブルtbodyのすべての要素の文字列を返します。私はその後、各列を使用して、何が注文されたかを識別しました。 –

+0

アンディ・ティンクハムの答えは、xpathの書き方をうまくカバーしています。 Andyに感謝します。タグのIDや名前がないときにxpathを書く方法を学びました。 // span [starts-with(。、'20% ')]:これは私のために役立ちます –

4

は、次の構文(私は単純化としてのjQueryを使用)を使用することができます:

RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return jQuery('input[name^=plate_order]').get(0);"); 

をまたprevioslyセレンで選択された要素を渡すことができます

((JavascriptExecutor) webDriver).executeScript("return doSomethingWithElement(arguments[0]);", webElement); 
関連する問題