Как обрабатывать всплывающие окна Windows, которые происходят в Selenium Python - PullRequest
0 голосов
/ 25 февраля 2020

Итак, у меня проблема, когда я пытаюсь автоматизировать импорт в приложении, которое не имеет API. В результате я должен сделать как 30 щелчков мышью, чтобы получить то, что я хочу (преувеличение). Тем не менее, я пытаюсь в основном автоматизировать клики, которые позволят мне загрузить указанный c файл. В результате я почти дошел до той части, где мне нужно выбрать конкретную c тестовую сборку, с которой я хочу импортировать файл. Есть поле, которое мне нужно сделать send_keys, чтобы найти правильную сборку импорта, которую я должен загрузить. Элемент Field выглядит следующим образом

<input class="lookupInput" type="text" name="brTestScoreImportLookupInput" id="brTestScoreImportLookupInput" style="width: 100px;" tabindex="1" onkeydown="return lookupKeyPressed(event,&quot;&quot;,&quot;simptbrws000.w&quot;)" origvalue="" det="true" aria-labelledby="" autocomplete="off">

Однако я не думаю, что мой код правильно обрабатывает окно, так как оно всплывает из предыдущего выбора. Поле, которое мне нужно обновить, можно найти на картинке, которую я загрузил: enter image description here Кроме того, XPATH для поля - //*[@id='brTestScoreImportLookupInput'] Полный код можно найти здесь . Основной аспект заключается в том, что я должен ввести TSI в это поле File ID, а затем нажать enter на моей клавиатуре, чтобы заполнить нужную утилиту импорта, которая мне нужна. Как только я это сделаю, утилиты импорта отфильтровываются, и мне нужно выбрать спецификацию c File ID: enter image description here.

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

# Click on Test Score Import Wizard - TW
# Test Wizard XPATH = //a[@id='tree1-3-link']/span
element = WebDriverWait(browser, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//a[@id='tree1-3-link']/span")))
element.click();

# Send test_upload and Send Keys
# Field XPATH = //*[@id='brTestScoreImportLookupInput']
test_lookup = browser.find_element_by_id("brTestScoreImportLookupInput")
test_lookup.send_keys(test_upload)

Если вы хотите перейти по ссылке на код репозитория, нажмите здесь выше. Любая помощь будет принята с благодарностью.

    Traceback (most recent call last): File ".\skyward_collegeboard_TSI_import.py", line 115, in
    <module> test_lookup = browser.find_element_by_id("brTestScoreImportLookupInput") File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id return self.find_element(by=By.ID, value=id_) File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py",
      line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py",
      line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="brTestScoreImportLookupInput"]"}
      (Session info: chrome=80.0.3987.122)

1 Ответ

0 голосов
/ 26 февраля 2020

Таким образом, я смог выполнить sh, используя следующий метод, используя как селен, так и pynput.

# Browser Switches to Window
WebDriverWait(browser,10).until(EC.number_of_windows_to_be(2))
browser.switch_to.window(browser.window_handles[-1])

# Send test_upload and oend Keys
# Field XPATH = //*[@id='brTestScoreImportLookupInput']
test_lookup = browser.find_element_by_id("brTestScoreImportLookupInput")
test_lookup.send_keys(test_upload)

# Press and Release Enter Key
keyboard.press(Key.enter)
keyboard.release(Key.enter)

По сути, мне пришлось переключиться на это всплывающее окно.

...