0

表示されるテキストでリストボックスから項目を完全に選択するコードを使用します。

 var selectElement = new SelectElement(TestFramework.FindWebElement(this));
 selectElement.SelectByText(text);

問題は、アイテム内のテキストを動的に変更したことです。次のようになります。

-- item1 -- または --- item1 ---

しかし、「item1」を含むテキストでアイテムを選択する必要があります。助言がありますか?

4

3 に答える 3

3

ソースを見ると、最初の検索(直接一致)で何も返されない場合、SelectByTextメソッドは一致するものを検索する必要があります。これが行われていない場合は、Selenium Developerでバグを発生させ、その間に独自の拡張メソッドを作成してください。containsEquals

/// <summary>
/// Select an option by first searching for a case insensitive direct match then trying a case insenstive contains match.
/// </summary>
/// <param name="selectElement">The SelectElement to use.</param>
/// <param name="searchText">The text to find in the options.</param>
public static void SelectByText(this SelectElement selectElement, string searchText)
{
    var allOptionsThatHaveText =
        selectElement.Options.Where(se => se.Text.Equals(searchText, StringComparison.OrdinalIgnoreCase));

    if (allOptionsThatHaveText.Any())
    {
        foreach (var option in allOptionsThatHaveText)
        {
            option.Click();
        }
        return;
    }

    var optionWithText = selectElement.Options.Where(option => option.Text.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0);
    if (optionWithText.Any())
    {
        foreach (var option in optionWithText)
        {
            option.Click();
        }
        return;
    }

    throw new NoSuchElementException(string.Format("Cannot find the text: {0} by either a case insenstive match or a case insensitive equals match.", searchText));
}
于 2012-10-23T08:46:21.107 に答える
1

SelectByText の代わりに XPath を使用でき、XPath 内で「contains」を使用できます。

次に例を示します。

var selectElement = new SelectElement(_driver.FindElement(By.XPath("//*[contains(text(), 'YOUTEXTHERE')]")));
于 2012-10-23T06:15:07.637 に答える