是否有任何方法可以将IWebElement名称作为参数而不是定位符(使用Id,Xpath等)传递给Wait?
我正在尝试使用页面对象模型编写一些代码,并且我已经确定了POM类中的元素,如下所示:
class MyTestPagePom
{
private IWebDriver driver;
//Locators
[FindsBy(How =How.Id, Using = "Questions[0].Answers[0].Id")]
public IWebElement MyTestElement1 { get; set; }
}
现在我有一个执行以下操作的等待方法:
public static void HandleWait(IWebDriver driver, By ElementIdentified, int TimeoutInSeconds)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(TimeoutInSeconds));
wait.Until(drv => drv.FindElement(ElementIdentified).Displayed);
}
该方法的调用方式如下:
HandleWait(driver, By.Id("Questions[0].Answers[0].Id"), 30);
有没有一种方法可以将IWebElement名称作为参数传递给wait方法,以便在调用该方法时不必再次传递Id?
我已经搜索了解决方案,但找不到任何解决方案。抱歉,如果有我错过的解决方案。我是C#和Selenium的新手,因此将非常感谢您的帮助。谢谢
答案 0 :(得分:0)
您可以编写自己的自定义ExpectedCondition
。您可以看到硒源here并遵循该模式,将IWebElement
作为参数。
可能类似于
public static Func<IWebDriver, IWebElement> ElementIsVisible(IWebElement element)
{
return (driver) =>
{
try
{
return element.Displayed ? element : null;
}
catch (Exception)
{
return null;
}
};
}