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