0

到目前为止,我一直在使用一种直接的技术来定义我的 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# 不强。有人可以帮我解决我的方法。我将不胜感激任何帮助。

4

3 回答 3

0

You could try something like this

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

Hope that helps some

于 2012-05-01T14:54:59.500 回答
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")

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

语法可能有误,请检查一下,因为我是在记事本的有限资源中完成的。

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

谢谢。

于 2012-05-02T05:33:44.727 回答
0

这是我最终选择的设计:

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

selenium.ClickAndWait(Menu.Home);

我有一个名为 Extensions 的新类,其中我有一个名为“ClickAndWait”的专用方法:

公共静态类扩展{

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

而且我仍然有我的专用菜单类和我的 Home 等方法:

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

感谢您的所有建议和指导人们:) Benny

于 2012-05-02T15:51:20.197 回答