Таким образом, я должен выбрать кнопку загрузки на странице, которая открывается с новой страницы после нажатия кнопки редактирования на предыдущей странице. Когда открывается новая страница, я должен выбрать файл для загрузки, выбрав Вот трассировку, которую я получаю, когда пытаюсь выбрать этот элемент:
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("bUpload")) {Attach();}" role="button">Upload</a>
Элемент кнопки сохранения для подтверждения загрузки на сервер:
<a class="button" id="bSave" tabindex="500" href="javascript:if (cbs("bSave")) {checkSave("EditImport","simpthttp000.w","close");}" role="button" style=""><span class="hkey">S</span>ave</a>
You можно увидеть изображение кнопок и страницу, где я должен выбрать файл ниже:
Основной код, который управляет этим, построен на 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"
},