7

テスト スクリプトを完成させ、かなり動的なページにアクセスしています。問題のページには、前のページの特定の基準が満たされた場合にのみ表示される要素 (通常はラジオ ボタンまたはチェック ボックス) があります。したがって、私のテストでは、以前の基準とは関係なくこのページにアクセスし、ページの下部にある「続行」要素を押しながら、これらの要素が表示される「IF」を処理したいと考えています。IDで要素をクリックする方法がいくつかありますが、これまでのところ次のコードがあります。

 // Selects the "Confirm" button
                IWebElement radioOption = mWebDriver.FindElement(By.Id("Radio_Button_Id"));
                if (radioOption.Displayed)
                {
                    this.ClickElementById("Radio_Button_Id");

                    // Clicks CONTINUE
                    this.ClickElementById("CONTINUE");
                }
                else
                {
                    // Selects CONTINUE
                    this.ClickElementById("CONTINUE");
                }

このコードで、ラジオ ボタンが表示された場合にそれを処理しようとしています。それを選択してから、[続行] ボタンを選択します。また、ラジオボタンが表示されない場合は無視して続行ボタンを選択してください。これについての助けは大歓迎です。

4

3 に答える 3

11

次のようなことを試してください:

//Displayed
public static bool IsElementDisplayed(this IWebDriver driver, By element)
{
    IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
    if (elements.Count > 0)
    {
        return elements.ElementAt(0).Displayed;
    }
    return false;
}

//Enabled
public static bool IsElementEnabled(this IWebDriver driver, By element)
{
    IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
    if (elements.Count > 0)
    {
        return elements.ElementAt(0).Enabled;
    }
    return false;
}

例外は発生せず、テストを続行できます。

于 2013-09-11T12:45:42.743 に答える
1

あなたはNoSuchElementExceptionsを取得していると言いました。radioOption.Displayed要素がページに表示されているかどうかをテストしますが、要素が存在しない場合はエラーがスローされます。(要素は存在できますが、見えません)

要素が存在するかどうかをテストするには、実行する必要がありますmWebDriver.FindElements(S に注意してください)。これList<WebElement>により、セレクターに一致するすべての要素が返され、何も見つからない場合は、サイズ 0 のリストが返されます (エラーはスローされません)。

そうすれば、if ステートメントは になりif (radioOptions.size()!=0)、要素が存在するかどうかを確認します (表示されているかどうかではありません)。

于 2013-09-10T13:55:08.990 に答える
0

また、要素が存在するかどうかをテストし、存在する場合は要素のハンドルを取得する方法としてこれを使用しました。

namespace SeleniumExtensions
{
    public static class WebDriverExtensions
    {
        public static bool TryFindElement(this IWebDriver driver, By by, out IWebElement element)
        {
            try
            {
                element = driver.FindElement(by);

                return true;
            }
            catch (NoSuchElementException)
            {
                element = null;

                return false;
            }
        }

        public static bool IsElementEnabled(this IWebDriver driver, By by)
        {
            IWebElement element = null;

            if (driver.TryFindElement(by, out element))
            {
                return element.Enabled;
            }

            return false;
        }
    }
}

これにより、次のようなコードが可能になります。

using SeleniumExtensions;

// ...

IWebElement element = null;

if (driver.TryFindElement(By.Id("item-01"), out element)
{
    // use element
}
else
{
     // element is null
}

または:

if (driver.IsElementEnabled(By.Id("item-01"))
{
    // item is enabled
}
于 2016-04-22T12:41:52.850 に答える