webdriver(c#) - 如何扩展我的方法以允许自定义属性?

时间:2014-11-19 16:05:06

标签: selenium selenium-webdriver webdriver

我已经写了(实际上是从互联网上重新占用了)以下代码块,它允许我等到一个元素'属性包含特定文本。我已经测试了代码,它似乎工作得很好(更好的方法欢迎):

IWebElement element = Utility.driver.FindElement(By.Id("modal-exchange"));
WebDriverWait wait = new WebDriverWait(Utility.driver, TimeSpan.FromMinutes(1));
wait.Until((d) =>
{
return element.GetAttribute("outerHTML").Contains("block");
});

我将这段代码包装在Utility类的一个方法中,所以我可以经常调用它。为了进一步方便,我稍微修改了它以允许我指定任何" By"从我的班级调用它时的定位器:

public static void WaitOnAttributeChange(By by)
{

    IWebElement element = Utility.driver.FindElement(by);
    WebDriverWait wait = new WebDriverWait(Utility.driver, TimeSpan.FromMinutes(1));
    wait.Until((d) =>
    {
        return element.GetAttribute("outerHTML").Contains("block");
    });

}

用法如下:

Utility.WaitOnAttribute(By.Id("modal-exchange"));

我现在的问题是(为了方便起见)我想采用我应用于By定位器的相同逻辑并将其应用于.GetAttribute和.Contains所以我可以在我的类中指定它们如果它们发生了变化,或者我正在寻找" outerHTML"以外的东西。或"阻止"

我希望这是有道理的,因为我不确定我应该用来解释我的问题的正确术语。编辑我的问题标题也欢迎

更新

我现在可以通过编辑我的方法来实现这个目的:

public static void WaitOnAttribute(By by, string attribute, string text)
        {
            IWebElement element = Utility.driver.FindElement(by);
            WebDriverWait wait = new WebDriverWait(Utility.driver, TimeSpan.FromMinutes(1));
            wait.Until((d) =>
            {
                return element.GetAttribute(attribute).Contains(text);
            });

        }

并按如下方式调用:

Utility.WaitOnAttribute(By.Id("modal-exchange"),"outerHTML", "block");

0 个答案:

没有答案