用于WebElements的Selenium动态选择器

时间:2017-02-16 11:20:00

标签: selenium selenium-webdriver dynamic

我正在构建一个测试框架,我的目标是使用这个框架测试许多具有相似页面的网站,彼此之间存在差异。

我有一个问题,我希望WebElements选择器是动态的,这意味着我想要传递我想要的方式作为FindElement方法的参数。

我正在尝试建立这样的东西:

public class WebComponent
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public IWebElement WebElement{get;set;}
            public Accessor Accessor { get; set; }
            public WebComponent()
            {
                Accessor = new Accessor();
            }

    }
    public class Accessor
    {
        OpenQA.Selenium.By By { get; set; }
        public string Value { get; set; }
    }

稍后在我的代码中,当我想要这个类的实例时:

WebComponent component = new WebComponent();
component.ID = 1;
component.Name = "Logout Button";
component.Description = "The button to click when user wants to logout of website";
component.Accessor.By = By.Id;
component.Accessor.Value = "logout";
component.WebElement = Browser.Driver.FindElement(//missing code);

我的问题是如何使用component.Accessor找到WebElement,非常感谢任何建议或建议的编辑。

1 个答案:

答案 0 :(得分:1)

By.Id是一个方法组,您无法将其指定为OpenQA.Selenium.By类型。作业应该是

component.Accessor.By = By.id("logout"); // or any other By and value.

然后你可以使用

找到元素
component.WebElement = Browser.Driver.FindElement(component.Accessor.By);
  

修改

要动态选择定位器和值,您可以执行类似

的操作
private By chooseType(String locatorType, string value) {
    switch(locatorType) {
        case "id":
            return By.id(value);
        case "class":
            return By.className(value);
        //...
    }
}