Как выбрать кнопку «Загрузить» и указать путь для загрузки документа в Selenium с помощью Python - PullRequest
0 голосов
/ 26 февраля 2020

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

Traceback (most recent call last):
  File ".\skyward_collegeboard_TSI_import.py", line 143, in <module>
    element = WebDriverWait(browser, 20).until(
  File "C:\Python38\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

Элемент загрузки файла такой:

<input type="file" name="file1" id="file1" tabindex="55" size="76" det="true">

Кнопка подтверждения загрузки:

<a class="button" id="bUpload" tabindex="60" href="javascript:if (cbs(&quot;bUpload&quot;)) {Attach();}" role="button">Upload</a>

Элемент кнопки сохранения для подтверждения загрузки на сервер:

<a class="button" id="bSave" tabindex="500" href="javascript:if (cbs(&quot;bSave&quot;)) {checkSave(&quot;EditImport&quot;,&quot;simpthttp000.w&quot;,&quot;close&quot;);}" role="button" style=""><span class="hkey">S</span>ave</a>

You можно увидеть изображение кнопок и страницу, где я должен выбрать файл ниже: enter image description here

Основной код, который управляет этим, построен на python и селене пакет, потому что программа, которую мы используем, не имеет API и не построена с использованием современных стеков веб-приложений. Я пытался использовать XPATH, NAME, CSS_SELECTOR и ID, чтобы нажать эту кнопку, чтобы выбрать документ для загрузки. Тем не менее, я не имел большого успеха.

Основной код, управляющий этим, можно найти здесь: https://github.com/Richard-Barrett/ITDataServicesInfra/blob/master/Python/Skyward/skyward_collegeboard_TSI_import.py

Фрагмент, управляющий нажатием этой кнопки:

# Upload Test File
# Choose File Button XPATH = //*[@id='file1']
element = WebDriverWait(browser, 20).until(
            EC.element_to_be_clickable((By.NAME, "file1")))
element.click();

Как уже упоминалось, Я пробовал NAME, XPATH и ID, с которыми ни один из них не работал. Я даже пытался написать однострочную, чтобы выбрать эту кнопку, чтобы перейти к следующему шагу для загрузки, а затем нажать «Сохранить».

Обновление: пробное переключение в окно, так как всего их три windows. Кроме того, я попробовал ответ @supputuri, упомянутый ниже, и получил следующий результат.

  File ".\skyward_collegeboard_TSI_import.py", line 151, in <module>
    element.send_keys("C:\Imports\CustomNameNeedsFormatting_02_24_2020_20_14_12_richardbarrett")
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 477, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT,
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  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.InvalidArgumentException: Message: invalid argument: File not found : C:\Imports\CustomNameNeedsFormatting_02_24_2020_20_14_12_richardbarrett
  (Session info: chrome=80.0.3987.122)

Код, который теперь обрабатывает эту проблему для переключения в третье окно:

# Upload Test File
# Choose File Button XPATH = //*[@id='file1']
# Window Page Address that Opens = https://skyward-student.del-valle.k12.tx.us/scripts/wsisa.dll/WService=wsEAplus/simptedit000.w?isPopup=true
# Browser Switches to Window
WebDriverWait(browser,10).until(EC.number_of_windows_to_be(3))
browser.switch_to.window(browser.window_handles[-1])
#upload = browser.find_element_by_id("file1")
#upload.send_keys(r"C:\Users\richard.barrett\Downloads\CustomNameNeedsFormatting_02_24_2020_20_14_12_richardbarrett")
element = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='file1']")))
element.send_keys("C:\Imports\CustomNameNeedsFormatting_02_24_2020_20_14_12_richardbarrett")

Вот определенные c элементы, с которыми мне нужно взаимодействовать из Запись Селен IDE:

{
      "id": "2193d953-a105-45d0-8e6f-7fa910863cc2",
      "comment": "",
      "command": "click",
      "target": "id=file1",
      "targets": [
        ["id=file1", "id"],
        ["name=file1", "name"],
        ["css=#file1", "css:finder"],
        ["xpath=//input[@id='file1']", "xpath:attributes"],
        ["xpath=//div[@id='pageContentWrap']/table/tbody/tr/td/fieldset/table/tbody/tr[9]/td/fieldset/table/tbody/tr/td[2]/table/tbody/tr/td/input", "xpath:idRelative"],
        ["xpath=//td[2]/table/tbody/tr/td/input", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "2f5cfebb-5e97-42da-97c6-2f7880fc2ec5",
      "comment": "",
      "command": "type",
      "target": "id=file1",
      "targets": [
        ["id=file1", "id"],
        ["name=file1", "name"],
        ["css=#file1", "css:finder"],
        ["xpath=//input[@id='file1']", "xpath:attributes"],
        ["xpath=//div[@id='pageContentWrap']/table/tbody/tr/td/fieldset/table/tbody/tr[9]/td/fieldset/table/tbody/tr/td[2]/table/tbody/tr/td/input", "xpath:idRelative"],
        ["xpath=//td[2]/table/tbody/tr/td/input", "xpath:position"]
      ],
      "value": "C:\\fakepath\\CustomNameNeedsFormatting_02_24_2020_20_14_12_richardbarrett.csv"
    }, 

1 Ответ

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

Отправьте путь к файлу к элементу.

element = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.NAME, "file1")))
# don't click on the element, just send the path directly
element.send_keys("File/path/goes/here")
...