У меня похожая проблема, но элемент по одному XPath находится, а по другому - нет.
Вот такой код работает:
public static void SelectRandomTypeOfDocument()
{
Browser.Click(OpenListOfTypes);
Browser.Click(Browser.FindElement(By.XPath("//li[text()='Элемент']")));
}
а если пробую найти таким образом:
public static void SelectRandomTypeOfDocument()
{
Browser.Click(OpenListOfTypes);
Browser.Click(Browser.FindElement(By.XPath("//div[contains(@style,'top')]//li[4]")));
}
то уже выдаётся ошибка:
Test(s) failed. OpenQA.Selenium.NoSuchElementException : Unable to find element with xpath == //div[contains(@style,'top')]//li[4]
Хотя Firepath по этому XPath элемент находит. Первый был сделан просто чтобы проверить, виден ли вообще этот элемент. Получается, что виден, а проблема в XPath. Мне принципиально надо найти именно по второму XPath, т.к. элементы выбираются случайным образом.
Интересно насколько стабильно повторяется проблема, бывают ли случаи когда тест проходит
Также интересно поведение в разных браузерах
Для исследования проблемы попробуй поставить sleep между этими строками. Если заработает, значит просто гонки. Вероятнее всего div не успевает появиться (сменить style на top). А в первом случае работает, потому что элемент ищется без div-а
В Firefox нормально работает? Оба xpath? Ну тогда надо либо сделать xpath более общим (чтоб он работал во всех браузерах), либо определять xpath в зависимости от браузера, под которым происходит работа тестов
Потому что у вас стили на элементе апплаются через CSS - поэтому можете забыть про @style в IE, за исключением инлайновых стилей.
Либа для Xpath в IE парсит исключительно сорс страницы.
Если критично используйте CssSelector - там со стилями будет все ок.
А хіба в тебе “top” добавляється в стайл не на mouseover? Є сенс робити moveToElement() на дівку, тоді пошук по стайлу спрацює. І весь список буде доступний.
Нет, top добавляется выборе элемента, когда элемент отмечается галочкой и выпадающий список под ним становится активным. В диве три параметра - id, class и style. Когда элемент не выбран, style="", а когда выбран, добавляются некоторые значения, в том числе и “top”. Но это в фаерфоксе, а в эксплорере параметра style в div’е вообще нет, только id и class.
Придумал как обойти использование style в xpath. Я просто запоминаю порядковый номер дива, который выбираю рандомом, а потом ищу его по классу и по этому номеру.
Проблема устранена. Всем спасибо )