Выбор автозаполнения списков с помощью Selenium - необходимо закрыть один список, прежде чем получить доступ к другому - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь написать Python скрипт с Selenium для автозаполнения формы.

Есть несколько полей с автозаполнением. Я могу заполнить их и выбрать следующим образом:

field1 = driver.find_element_by_id("field-1")
field1.send_keys("input")
driver.find_element_by_xpath("//ul[1]/li[1]") #this clicks on the first autocomplete option

Это прекрасно работает.

Однако, чтобы перейти к следующей форме, я должен сначала смоделировать щелчок мышью, и обычно задержка на 5-8 секунд:

driver.find_element_by_xpath("//body").click()
time.sleep(delay)

Задержка обычно устанавливается на 8 секунд - меньше, и время от времени она не работает.

Есть ли более эффективный способ сделать это, чтобы избежать использования временной задержки?

Я подумал, что, возможно, мне нужно выйти из формы / позволить Selenium подтвердить, что автозаполнение выбрано.

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете использовать WebDriverWait, чтобы дождаться, когда элемент будет найден в новой форме. Таким образом, вам не придется явно объявлять функцию задержки, и код возобновит выполнение, как только появится новая форма.

Пример кода

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
driver.find_element_by_xpath("//body").click()
try:
    myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
    print "new form is ready!"
    # add your code here
except TimeoutException:
    print "Loading took too much time!"

Вы также можете использовать любой другой тип метода, чтобы найти локатор.

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