C# 字符串参数的自动完成

C# 字符串参数的自动完成,c#,testing,selenium-webdriver,autocomplete,nunit,C#,Testing,Selenium Webdriver,Autocomplete,Nunit,我已经使用NUnit和SeleniumWebDriver建立了一个测试项目,您可以在下面找到一个简短的版本 class ByHolder { public readonly string name, path; public readonly Func<string, By> call; public ByHolder(string name, string path, Func<string, By> call) { t

我已经使用NUnit和SeleniumWebDriver建立了一个测试项目,您可以在下面找到一个简短的版本

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");
    }

    ...
}
(使用Selenium一段时间后,我发现在测试中反复使用driver.FindElement…会很快变得混乱。)

尽管我对缩写版本和可读性很满意,但当然也没有自动完成或检查,因为我处理的是字符串,而不是IWebElement对象,或是已经命名或放在特定getter中的引用。 我过去常做的事情如下,但感觉不对:

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

    ...
}
我想知道在添加例如d.Click(“stringvalue”)时,是否有一种方法可以实现字符串值的自动完成或其他检查


提前谢谢。

用什么、什么时间和如何自动完成什么?一些我不知道你在问什么。对不起,我不太清楚。我的意思是,当您输入绑定引用时,自动完成就像wpf中的情况一样。或者一个检查,它在编译时给出警告,例如,如果给定的字符串与列表中的某个名称不匹配,则您要通过单击(string方法)扩展基类WebElement。我以为我已经做到了;。我希望编译器或我的代码编辑器(在我的例子中是visual studio)通知我,当d.Click的给定字符串值(“stringValue”)与我的Page类中的ByHolder对象(特别是列表中所有这些对象的名称)在LocatorList中不可用时,请选择可读性和可理解性,而不是较少键入。键入“d”和“driver”并不能真正为您节省那么多的击键次数,每个人都会知道“driver”是什么。。。谁知道“d”代表什么。如果您查找大多数语言的最佳实践,他们会说让您的变量名可读和可理解。现代IDE将使键入更长的名称几乎是即时的。
class Locators
{
    public By GetButton()
    {
        return By.Id("button");
    }

    ...
}