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((....); 使用通用函数。

如何 Ideclare 一个通用的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除非您打算将其作为static字段或扩展方法,否则您还必须传入driver

于 2013-09-02T14:12:26.840 回答