Вычитал про способ подмены стандартного метода FindElement():
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) { if (timeoutInSeconds > 0) { var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); return wait.Until(drv => drv.FindElement(by)); } return driver.FindElement(by); }
В принципе так работает, но в тестах всюду юзается Page Object, а в примере метод хочет явный локатор
Вот такая конструкция работает :
new WebDriverWait(_driver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementExists(By.CssSelector("input[title='Unapprove']"))).Click();
А вот так - нет:
var dash = new DashboardPage(_driver); new WebDriverWait(_driver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementExists(dash.Unapprove)).Click();
Елемент Unapprove объявлен в классе DashboardPage:
[FindsBy(How = How.CssSelector, Using = "input[title='Unapprove']")] public IWebElement Unapprove;
Если прописывать явные ожидания для ИЕ с конкретными локаторами, то вся концепция Page Object теряет смысл.
Можно-ли как-то заюзать элементы Page Object типа dash.Unapprove в ожиданиях Until(ExpectedConditions.ElementExist(), т.е. не By().
Заранее благодарен.