Selenium находит по исключению тайм-аута id - PullRequest
0 голосов
/ 10 сентября 2018

У меня проблема с селеном. У меня есть что-то вроде структуры DOM:

<div class="window__popup" style="display: block; transform: translateY(0px);">
    ...
    <div id="user_product_name" class="input__block">
        ...
        <input type="text" name="name" required="required" class="input">
        <div class="placeholder">Представьтесь, пожалуйста</div>
        ...
    </div>
    ...
</div>

Итак, этот div не отображается по умолчанию, но когда я нажимаю кнопку, он становится открытым. И у меня есть этот код, чтобы найти div, который содержит идентификатор:

self.form_elements["UserName"] = Input(self._driver, Locator("xpath", "div[@id='user_product_name']"))

или

self.form_elements["UserName"] = Input(self._driver, Locator("id", "user_product_name"))

Обе эти опции не работают, но выдают исключение тайм-аута:

selenium.common.exceptions.TimeoutException: Message:

Однако этот код работает нормально:

self.form_elements["UserName"] = Input(self._driver, \
        Locator("xpath", "//div[contains(@class, 'window__popup')]//div[contains(@class, 'placeholder') and text()='Представьтесь, пожалуйста']/ancestor::div[contains(@class, 'input__block')]"))

Вот почему я считаю, что проблема в div с id, который находится внутри скрытого элемента. Как я могу решить это без написания огромного xpath?
Редактировать: Этот код находит элемент, но когда я пытаюсь ввести, он генерирует исключение. Извините, за редактирование.

1 Ответ

0 голосов
/ 10 сентября 2018

Ваши рабочие и не рабочие локаторы немного отличаются.
В рабочем локаторе вы ищете элемент внутри div с классом window__popup. Как я понял, div[@id='user_product_name'] не уникальный элемент и может существовать в другой части DOM, которая не видна.
Проверьте, сколько элементов с user_product_name id у вас есть в DOM. Не забудьте driver.find_elemet... вернуть вам первый элемент, расположенный в DOM и не видимый.

Попробуйте использовать селектор CSS ниже:

.window__popup #user_product_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...