Selenium C#使用WaitForElementPresent&创建类方法WaitForPageToLoad等

时间:2012-05-01 14:39:30

标签: c# class methods selenium

到目前为止,我一直在使用一种直接的技术来定义我的xpath并调用selenium动作来使用xpath。例如:

使用测试脚本编写代码 -

selenium.WaitForElementPresent(Menu.Home);

selenium.Click(Menu.Home);

selenium.WaitForPageToLoad(null);

方法中的代码 -

public class Menu

{

public const string Home = "//ul[@class='menunavigation']/li/a[contains(text(),'Home')]";

}

......继续我的下一步行动。

但这不是一个好习惯,因为我不必要地在我的测试脚本中复制代码。所以我想构建包含额外等待等的类方法,以便我的测试脚本只包含行:

selenium.Click(Menu.Home);

我的方法看起来像这样:

public static void Home(string xpath, object selenium)

{

xpath = "//ul[@class='gts-ribbon']/li/a[contains(text(),'Home')]"; selenium.WaitForElementPresent(xpath);

"now perform the click command"

selenium.WaitForPageToLoad(null);

}

但这对我不起作用,因为我的C#并不强大。 有人可以帮我修复我的方法。我非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

你可以试试这样的事情

 public void ClickSave(Element element, IWebDriver webDriver)
        {
            if (webDriver.FindElement(By.LinkText(element.Text)).Enabled)
            {
                element.Click();
            }
        }

希望有所帮助

答案 1 :(得分:0)

在库文件中创建这样的函数。

public void isPresentClick(DefaultSelenium selObj,string locator)  
{  
   selenium.WaitForElementPresent(locator);
   selenium.Click(locator);
   selenium.WaitForPageToLoad(3000);
}

当您按以下方式要求时,请勿调用此功能 创建库的对象(obj)并使用该函数。

object obj = new library();
obj.isPresentClick(selenium,"Menu.Home")

这将调用库中的函数并执行其中指定的步骤。

语法可能有误,请检查我在记事本中的有限资源中做了这个。

根据我的建议,你不应该使用等待页面来加载该库函数。

感谢。

答案 2 :(得分:0)

这是我最后选择的设计:

在我的测试脚本中,我调用了一个新的selenium命令:

  

selenium.ClickAndWait(Menu.Home);

我有一个名为Extensions的新类,在此我有一个名为'ClickAndWait'的专用方法:

  

public static class Extensions       {

    public static void SelectAndWait(this ISelenium selenium, string locator)
    {
        selenium.WaitForElementPresent(locator);
        selenium.Select(locator);
    }
}

我仍然使用我的Home等方法提供我的专用菜单类:

  

公共课菜单       {           public const string Home =“// ul [@ class ='menunavigation'] / li / a [contains(text(),'Home')]”;       }

感谢您的所有建议和指导人员:) 尼