Транспортир кажется не ждать
Работа с Protractor от Bruno Baia v0.9.2 Selenium Webdriver v3.0.1 Selenium.Webdriver.ChromeDriver v2.27.0 Я сталкиваюсь со следующей проблемой. Я вхожу с неугловой страницы. Когда я нахожусь на первой угловой странице своего приложения, я хочу нажать на первую строку NgRepeater на странице следующим образом:
class CarCompanies
{
NgWebDriver driver;
[FindsBy(How = How.XPath, Using = "Bedrij")]
private IWebElement linkBedrijven;
public bool ContainsText(string text, string heading)
{
return SelecteerElement.pageContainsHeadingElementWithText(driver, text, heading);
}
public void ClickFirstCar()
{
driver.FindElements(NgBy.Repeater("dmsInstance in dmsInstanceList"))[0].Click();
}
public CarCompanies(NgWebDriver driver)
{
this.driver = driver;
PageFactory.InitElements(driver, this);
}
}
Это прекрасно работает, когда предыдущее утверждение Thread.Sleep()
но без этого нежелательного сна IndexOutOfRangeException
появляется. Водитель говорит мнеIgnoreSynchronisation = false
isAngular2 = false
,
Что я делаю неправильно?
1 ответ
Я предполагаю, что элемент еще не там, когда вы звоните FindElements
без сна. Вы должны подождать, пока элемент будет там, прежде чем искать его.
Скорее всего, используя
driver.WaitForAngular();
решит проблему (методы ждут угловых, чтобы закончить загрузку).
Если нет, вы можете установить неявное ожидание или написать расширение для ожидания при поиске элемента.
Кстати, в вашем случае нет необходимости использовать FindElements(By)[0]
метод FindElement
вернет первый элемент в DOM.