Selenium не видит элемент

188
04 ноября 2021, 10:50

Что не так в Selenium или xpath ? Я использую xpath //span[@id='responseDate'], а проверка на наличие элемента приносит мне false, хотя в тоже время - я без проблем могу вытащить из него текст и нахожу его руками по xpath в панели разработчика chrome. И так же успешно вытаскиваю из него текст - если привязываюсь к любому другому элементу для проверки.

1 фрагмент который не находился - но как то сам исправился после того как обновил метод неявного ожидания с помощью библиотеки DotNetSeleniumExtras.WaitHelpers

<td class="footable-last-visible" style="display: table-cell;"><span id="responseDate">04.01.2020</span></td>

Так находит и вытаскивает текст

            if (ProverkaGotovnostiXPath("//input[@value='<<Назад']", Browser))
            {
                string text = PolucitTextXPath("//span[@id='responseDate']", Browser);
                .....
            }

А так не находит

            if (ProverkaGotovnostiXPath("//span[@id='responseDate']", Browser))
            {
                string text = PolucitTextXPath("//span[@id='responseDate']", Browser);
                .....
            }

2 фрагмент до сих пор не находит

<p><strong>Номер там то: </strong>1244595735385395</p>

Использую такой xpath //*[contains(text(), 'Номер')]/ancestor::p/text()

    // Проверка на наличие элемента в DOM
    private bool ProverkaGotovnostiXPath(string xpath, IWebDriver Browser)
    {
        try
        {
            WebDriverWait wait = new WebDriverWait(Browser, new TimeSpan(0, 0, 10));
            IWebElement elem = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(xpath)));
            return true;
        }
        catch (Exception ex)
        {
            Logger.WriteLog("ProverkaGotovnostiXPath", ex.Message);
            return false;
        }
    }

В ex.Message получаю Timed out after 10 seconds - хотя элемент там есть

Ничем не перекрывается и не во фреймах

UPD

Проверил на всякий случай PageSource ручками и там тоже находятся элементы моими xpatch - а selenium не видит...

UPD Пробую с Css selector - Тоже не ищет

Answer 1

Скрипт открывает страницу, и сразу ищет элемент. Возможно ошибка в том, что страница еще не успела загрузится для Сelenium.

Можно дождаться загрузки так:

wait.until(EC.visibility_of_element_located((By.ID, "responseDate")))

Или после открытия страницы сделать паузу выполнения программы time.wait(время). Последний вариант "костыльный", но им легче узнать действительно ли в этом проблема.

READ ALSO
PHP isset() $_POST не работает

PHP isset() $_POST не работает

Постоянно выводит false

196
Как открыть документ онлайн?

Как открыть документ онлайн?

Пишу сайт на php и понадобился просмотр документов онлайнЖелательно как в mail

182
Как правильно использовать &lt;!DOCTYPE html&gt; в Laravel blade

Как правильно использовать <!DOCTYPE html> в Laravel blade

Проблема в том, что когда я подключаю просто <!DOCTYPE html> вверху layoutblade

160