0

特定のアイテムを見つけるための汎用関数を作成したいですか?

私はこのC#コードを実行します(Src:Selenium WebDriverで明示的な待機を正しく使用します

        IWebDriver driver = new FirefoxDriver();
        driver.Url = "http://somedomain/url_that_delays_loading";
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
        {
            try
            {
                return d.FindElement(By.Id("someDynamicElement"));
            }
            catch
            {
                return null;
            }
        });

一般的な関数を使用して、wait.Until((....); を置き換えます。

特定の項目を見つけるためにジェネリックByセレクターを宣言するにはどうすればよいですか?

組み込みの Selenium2 セレクターのリストを次に示します。

ClassName
CssSelector
Id
LinkText
PartialLinkText
Name
TagName
XPath

例えば ​​:

IWebElement myDynamicElement = WaitForElement(????) // for exemple By.TagName = "Test"
public static IWebElement WaitForElement(**By selector**)
{
    wait.Until<IWebElement>((d) =>
    {
            try
            {
                return d.FindElement(**By selector**);
            }
            catch
            {
                return null;
            }
    });
}
4

1 に答える 1

2
public static IWebElement WaitForElement(IWebDriver driver, By selector)
{    
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10);
    return wait.Until<IWebElement>(d =>
    {
            try
            {
                return d.FindElement(selector);
            }
            catch
            {
                return null;
            }
    });
}

これは次のように呼び出されます。

WaitForElement(driver, By.Id("someDynamicElement"));

Byセレクターのインスタンスを与えるだけです。基になるd.FindElement呼び出しは残りを処理し、セレクターの「種類」を把握します。多くのことをする必要はありません。

クラスの背後にある全体的な概念Byは、そもそもクラスをジェネリックにすることです。作業が重複します。

また、それ自体をフィールドまたは拡張メソッドdriverとして使用する予定がない限り、 も渡す必要があります。staticdriver

于 2013-09-02T14:12:26.840 に答える