自动完成字符串参数

时间:2015-12-01 19:42:54

标签: c# testing selenium-webdriver autocomplete nunit

我已经使用NUnit和Selenium Webdriver设置了一个测试项目,你可以在下面找到一个缩短的版本。

class ByHolder
{
    public readonly string name, path;
    public readonly Func<string, By> call;

    public ByHolder(string name, string path, Func<string, By> call)
    {
        this.name = name;
        this.path = path;
        this.call = call;
    }
}

class Page
{
    private readonly List<ByHolder> LocatorList = new List<ByHolder>();

    public Page()
    {
        SetUpList();
    }

    private void SetUpList()
    {
        AddLocator("Button0", "//button0", By.XPath);
        AddLocator("Button1", "button1", By.Id);
        ...

    }


    public By Get(string locatorName)
    {
        var holder = LocatorList.FirstOrDefault(p => p.name.Equals(locatorName));

        return holder?.call(holder.path);
    }

    public void AddLocator(string name, string path, Func<string, By> call)
    {
        LocatorList.Add(new ByHolder(name, path,call ));
    }


}

class PersonelDriver : IWebDriver
{
    IWebDriver driver = new FirefoxDriver();
    Page page = new Page();


    public void Click(string locatorName)
    {
        driver.FindElement(page.Get(locatorName)).Click();
    }

    ...
}

[TestFixture]
class PageTest
{
    private readonly PersonelDriver d = new PersonelDriver();

    [Test]
    public void ClickTest0()
    {
        d.Click("Button0");
    }
    [Test]
    public void ClickTest1()
    {
        d.Click("Button1");
    }

    ...
}

正如你可以看到我尝试用最少的变量实现一个缩短的方法,以使更长的测试用例更易于阅读,主要针对外人,但也适用于我,例如。

d.Click("that");
d.EnterText("thisLocator","text");
d.WaitFor("somethingElse");
d.Click("this");

(使用Selenium一段时间后,我发现在测试中反复使用driver.FindElement ...时,事情会变得非常混乱。)

即使很难,我对缩短的版本和可读性感到满意,当然没有自动完成或检查,因为我正在处理字符串而不是IWebElement对象或者已经命名或放入特定getter的引用。 我过去做的是以下,但它只是感觉不对:

class Locators
{
    public By GetButton()
    {
        return By.Id("button");
    }

    ...
}

我想知道在添加例如d.Click(“stringvalue”)时是否有办法实现自动完成或其他字符串值检查;

提前谢谢。

0 个答案:

没有答案