在C#WebDriver中,我想单击网页上可用的许多链接



我想单击网页上可用的许多链接,我写了一个代码,其中使用了下面给出的开关案例。因此,任何人都可以告诉我,我们可以使用枚举或任何其他方式单击特定链接。作为回报,它将给出pageObject。

我在开关情况下使用的代码带有两个链接,

public Object SelectMenu(string menuName)
{
    Object result = null;
    IWebElement menuTemp = driver.FindElement(By.XPath(".//a[contains(text(),'" + menuName + "')]"));
    if (menuTemp.Enabled)
    {
        menuTemp.Click();
        if (menu.ToUpper() == "COUNTRY")
        {
            result = new CountryPage(driver).Load();
        }
        else if (menu.ToUpper() == "PARTNER")
        {
            result = new PartnerPage(driver).Load();
        }

您在寻找这样的东西吗?

string  menu = "country";
        switch (menu.ToUpper())
        {
            case "COUNTRY":
                result = new CountryPage(driver).Load();
                break;
            case "PARTNER":
                result = new PartnerPage(driver).Load();
                break;                
        }

如果您不想输入您期望实例化的类并绑定到构造函数和负载方法。这种方法的一个例子是:

var menu = "Country";
var pageClass = (from asm in AppDomain.CurrentDomain.GetAssemblies()
            from pageType in asm.GetTypes()
            let ctor = pageType.GetConstructor(new [] {typeof(IWebDriver)})
            let load = pageType.GetMethod("Load", Type.EmptyTypes)
            where pageType.Name.EndsWith("Page")
            && pageType.Name.StartsWith(menu, StringComparison.InvariantCultureIgnoreCase)
            && ctor != null
            && load != null
            select new { Constructor = ctor, Load = load}).Single();
 var page = pageClass.Constructor.Invoke(new []{webdriver});
 var result = pageClass.Load.Invoke(page, null);
 // result has now your CountryPage instance

这是如何工作的:

通过调用getAssemblies,可以迭代所有程序集并调用GetTypes返回所有公共类型。
您需要您的页面类接受构造函数中的iWebdriver,因此每种类型都会使用GetConstructor调用询问。getMethod的负载需求完成了需求。
最后要做的是检查该类型的名称是否与页面结尾的约定与Menuname开始。
在最后一步中,单个(又一无所有)的项目被返回。从此,我们可以通过调用Invoke并随后为加载成员的调用方法创建类型。
返回最终结果。

请注意,如果您创建类型的countryCitypage,您会发现两种类型。我将其作为练习,供读者提出解决方案

相关内容

最新更新