Напишите функцию Python, которая ожидает и слушает, пока не будет выполнено условие, аналогично WebDriverWait (). Till (). - PullRequest
0 голосов
/ 26 января 2019

Как правило, я хочу написать функцию, которая ожидает выполнения условия.

В частности, я хочу, чтобы он ждал, пока элемент не существует или не существует, поэтому, как только этот элемент существует, я хочу, чтобы мой сценарий знал без каких-либо задержек и продолжал.

Более подробно, в цикле "while True" я хочу, чтобы мой сценарий ждал до того момента, когда существует элемент (условие более общее), затем выводит время отображения этого элемента, затем он снова ждет, пока этот элемент не исчезнет, ​​затем печатает время исчезновения. и повторите.

Это означает что-то похожее на "WebDriverWait (). Till ()" , используемое в селене, но я хочу написать свою собственную функцию на python и без использования сторонней библиотеки, чтобы я мог используйте его, даже когда не используете селен или любую другую библиотеку.

while true:
    element = WebDriverWait(driver, 28800).until(
        EC.visibility_of_element_located(
           (By.XPATH, "//span[@title = 'online']")))
    print(online_time)

    element = WebDriverWait(driver, 28800).until(
    EC.invisibility_of_element_located(
        (By.XPATH, "//span[@title = 'online']")))
    print(offline_time)

Я уже искал и нашел несколько ответов, которые рекомендуют использовать функцию sleep () с условиями, функцию wait () или кодирование какого-либо типа слушатель , а также говорим о концепции опроса , которую я действительно не понимаю.

К сожалению, я попытался поработать с функцией sleep (), но я не смог написать ни одного кода, достойного публикации здесь, в качестве попытки добиться желаемого поведения, потому что я не знаю, когда элемент будет отображаться, сколько времени он будет существовать и когда оно снова исчезнет. так что работа с точным количеством секунд ничего не стоит, я думаю.

Надеюсь, вы поможете мне написать это или, по крайней мере, приведете меня на правильный путь.

Любое объяснение понятий, о которых я говорил приветствуется . PS: я начинающий программист.

1 Ответ

0 голосов
/ 26 января 2019

Это может быть трудно обобщить, как вы думаете об этом.Часто вы не хотите ждать вещей.Лучше делать другие вещи или ничего не делать.Python имеет целую библиотеку, посвященную таким вещам.он называется asyncio .

Концептуально, все, что вам нужно, это функция, которая сообщит вам, завершено ли какое-то действие, и цикл while.

import time    
while not action_is_complete():
    sleep(10)

Это сохранитдо тех пор, пока action_is_complete() не вернется true.Тогда ваша программа продолжит выполнение.

...