2016-12-27 45 views
0

我想单击网页上提供的许多链接中的一个链接,并且我写了一个代码,下面给出。所以任何人都可以告诉我,我们可以使用枚举或任何其他方式来点击特定的链接。作为回报,它会给页面对象。在C#Webdriver中,我想单击从网页上可用的许多链接中的一个链接

里面我是用带开关的情况下,有两个链接的代码,

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

回答

0

您正在寻找这样的事情?

string menu = "country"; 

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

看到我的代码,menuTemp是链接,如果der 30链接,所以我必须写30个案例,点击代码后,我们会回来作为您在ur代码中编写的页面的回报,它也可以减少dis代码。 – Harshit007

0

如果你不想打字了,您希望实例化类,但的菜单项的命名和你...... Page类是一致的,你可以使用反射查找您的页面类型,并结合构造函数和Load方法。这种做法的一个例子是这样的:

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返回所有公共类型。
您需要您的Page类在构造函数中接受IWebDriver,因此每种类型都会通过GetConstructor调用进行查询。负载需求由GetMethod完成。
最后要做的是检查类型的名称是否与以Page结尾的惯例匹配,并从menuname开始。
在最后一步中返回一个单独的(没有其他)项目。 从这个结果中,我们可以通过调用invoke来创建类型,然后为Load成员调用invoke method
返回最终结果。

注意,如果你创建一个CountryCityPage类型,你会发现两种类型。我把它作为一个练习,为读者提出一个解决方案

相关问题