1

セレンを使用して、アイテムの順序、または複数選択リストまたはドロップダウンのキーのリストを取得したいと思います。セレンAPIを見ると、選択したアイテムのインデックスを取得できることがわかりますが、すべてのアイテムのインデックスまたはキーを取得したいと思います。出来ますか?まだならどうやって?または、リストを取得できれば、アイテムのインデックスと値も問題ないはずです。または、とにかく、リストボックス/複数選択リストのすべてのキーまたは値を一度に1つずつ取得しますか?

実際、指定されたアイテムが正しい順序になっていることを確認したいと思います。

(実際、指定されたアイテムが正しいことを確認するためのフィクスチャを提供したいと思います。たとえば、リストボックスにA、B、C、D、Eが含まれていて、誰かがこのAPIを(new String( "A、B、c、 D、E ")、dropDownLocator)の場合、trueを返す必要があります。それ以外の場合はfalseを返します。)

4

2 に答える 2

5

@ 9ikhanからの回答は属性を取得するために正しいですが、その回答に関する1つの警告に言及する価値があると思います。さらに、実際に属性値ではなく要素コンテンツを探している場合は、より簡単な解決策を提供します。

ポイント1:属性を取得するための構文。

ロケーター"//some-xpath-here/@attribute-name"は標準のXPathの正しい構文ですが、属性に関しては、 Seleniumは標準のXPathを使用しません。むしろ、これを使用します-最後のvirguleの削除に注意"//some-xpath-here@attribute-name"してください:(私の質問で@Wesley Wiserによって最初に指摘されたようにSeleniumのGetAttributeメソッドの合併症)。この例のように、標準のXPath構文が機能する特定の特殊なインスタンスが存在する場合がありますが、一般に、Selenium構文を使用する必要があることに注意してください。

ポイント2:属性の代わりに要素コンテンツを取得する。

これが同じコードの私のバージョンです。まず、コンテンツから属性値を明確に描写するために改訂されたHTML:

<html>
  <body>
    <select id ="bakedgoods">
     <option value="1">cookie</option>
     <option value="2">donut</option>
     <option value="3">muffin</option>
    </select>
  </body>
</html>

そして、私のコードフラグメントはたまたまC#にありますが、それは前のJavaの例と実質的に同じです。2つのバリエーションを示したことに注意してください。1つは属性用、もう1つはコンテンツ用なので、テストするもののコメントを外すことができます。

var optionCount = (int) selenium.GetXpathCount("//select[@id='bakedgoods']/option");
var optionList = new List<String>();
for (int i = 1; i <= optionCount; i++)
{
    // Get element content:
    // Returns: cookie, donut, muffin
    String option = selenium.GetText("//select[@id='bakedgoods']/option[" + i + "]");

    // Get attributes:
    // Returns: 1, 2, 3
    //String option = selenium.GetAttribute("//select[@id='bakedgoods']/option[" + i + "]@value");
    optionList.Add(option);
}

ただし、コンテンツが必要な場合は、はるかに簡単なソリューションがあります。

// Get element content:
// Returns: cookie, donut, muffin
string[] items = selenium.GetSelectOptions("//select[@id='bakedgoods']");
于 2011-05-10T16:20:44.247 に答える
1

あなたのhtmlがこのようなものなら

<select id ="lang">
 <option value="en_US">en_US</option>
 <option value="en_GB">en_GB</option>
 <option value="en_IE">en_IE</option></select>

その後、このようなものを使用することができます

int optionCount = selenium.getXpathCount("//select[@id='lang']/option").intValue();
        ArrayList<String> optionList = new ArrayList<String>();
        for (int i = 1; i <= optionCount; i++) {
            String option = selenium.getAttribute("//select[@id='lang']/option["+i+"]/@value");
            optionList.add(option);
        }

ここではJavaを使用しました。オプション要素はの中にありoptionList、既存のリストと比較できます。また、これはラベルでは機能しません。たとえば<option value="en_US">English(U.S)</option>、そこから英語(US)を取得することはできませんが、このコードはどの属性でも機能します。

于 2011-05-09T16:20:06.053 に答える