2013-04-18 20 views
8

Selenium(2.31.0、JavaSE 1.6とIE9を使用)を使用してページ上の一連の要素を検索しようとしています。これらの要素はすべて、「dataLabel」または「dataLabelWide」という2つのクラス名のいずれかを持ちます。現在、私のコードはこれらの要素を2つの別々のArrayLists(クラス名ごとに1つずつ)に集め、それらを配列に変換して1つの配列に結合します。しかし、この方法では、要素が順番に並んでいないので、ページのHTMLソースにあるものと同じ順序でそれらを残す必要があります。私のコードの上記部分は、(説明のために追加されたコメントで)このようになりますJavaを使用したSelenium Webdriver:1つのコマンドで複数のクラス名を持つ要素を見つける

// Application runs on WebDriver d, an InternetExplorerDriver. 
// After navigating to the page in question... 

List<WebElement> labels = d.findElements(By.className("dataLabel")); 
List<WebElement> wLabels = d.findElements(By.className("dataLabelWide")); 
// Locates the elements of either type by their respective class name. 

WebElement[] labelsArray = labels.toArray(new WebElement[labels.size()]); 
WebElement[] wLabelsArray = wLabels.toArray(new WebElement[wLabels.size()]); 
// Converts each ArrayList to an array. 

List<WebElement> allLabels = new ArrayList<WebElement>(); 
// Creates an ArrayList to hold all elements from both arrays. 

for(int a = 0; a < labelsArray.length; a++) { 
    allLabels.add(labelsArray[a]); 
} 
for(int b = 0; b < wLabelsArray.length; b++) { 
    allLabels.add(wLabelsArray[b]); 
} 
// Adds elements of both arrays to unified ArrayList, one by one. 

WebElement[] allLabelsArray = allLabels.toArray(new WebElement[allLabels.size()]); 
// Finally converts unified ArrayList into array usable for test purposes. 
// Far too complicated (obviously), and elements end up out-of-order in array. 

私が最も効率的なソリューションは、彼らがしたいので、いずれかのクラス名で要素を検索することだと思いますすぐに単一のリスト/配列に含まれます。私は自分でいくつかの検索をしましたが、この作業をどのように管理するかについて決定的なアイデアは見つかりませんでした。これを行う方法があれば教えてください。

答えて

28

は、なぜあなたは、次の操作を行いません: ''

driver.findElement(By.cssSelector(".dataLabel,.dataLabelWide"); 

セレクタは、 "私にこのクラスのすべての要素を与えてください。" '、'演算子は、CSSセレクタの 'または'演算子です。

+1

ご質問ありがとうございました。残念ながら、私はSeleniumの新機能ですので、要素の配置方法はわかりません。セレクターとオペレーターの説明を含めていただければ幸いです。私はこの例題に試して結果を報告します。 –

+0

この例は実際に私の問題を解決します。お手伝いいただきありがとうございます。 –

+0

かなりきれいです。私はそれが好きだった – Saifur

関連する問題