Показаны сообщения с ярлыком Цикл While. Показать все сообщения
Показаны сообщения с ярлыком Цикл While. Показать все сообщения

среда, 6 января 2021 г.

Получить имя скачиваемого файла на Mac и Windows (если это имя не содержится в ссылке для скачивания)

 Код в файле теста:


@pytest.mark.skipif(pytest.mark._config.getoption('os') == 'win', 
                    reason='This test is for Mac only')
def test_correct_app_version_should_be_downloaded_on_mac(driver):
page.open(driver)
page.click_download_button(driver)
assert page.is_downloaded_app_version_correct(driver, TestData.app_for_mac_format), \
"Downloaded App has incorrect for Mac format"


@pytest.mark.skipif(pytest.mark._config.getoption('os') == 'mac', 
reason='This test is for Windows only')
def test_correct_app_version_should_be_downloaded_on_windows(driver_win_chrome):
page.open(driver_win_chrome)
page.click_download_button(driver_win_chrome)
assert page.is_downloaded_app_version_correct(
       driver_win_chrome, TestData.sa_app_for_win_format), \
"Downloaded App has incorrect for Windows format"


Код в Page:
@allure.step("Check if downloaded App version is correct.")
def is_downloaded_app_version_correct(driver, expected_format):
downloaded_file_name = _get_downloaded_filename(driver, 180)
print(downloaded_file_name)
return expected_format in downloaded_file_name

def _get_downloaded_filename(driver, waitTime):
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[-1])
driver.get('chrome://downloads')
endTime = time.time()+waitTime
while True:
try:
return driver.execute_script(
"return document.querySelector('downloads-manager').shadowRoot.querySelector"
"('#downloadsList downloads-item').shadowRoot.querySelector"
"('div#content #file-link').text")
except:
pass
time.sleep(1)
if time.time() > endTime:
break

среда, 30 декабря 2020 г.

Найти имя скачанного файла и проверить содержит ли оно определенный текст (Python/Selenium)

 Итак, задача такая: 

 - клиент кликает на Скачать кнопку,  начинается загрузка. Нужно найти скачиваемый файл в папке и проверить действительно ли это файл с расширением .dmg (для Mac).

Если название файла содержится в ссылке для скачивания, то решение этой задачи будет довольно простым. Но в нашей ситуации ссылка одна, при клике на нее, автоматически определяется Mac или Windows. Соответсвующий файл (.dmg для Mac, .exe для Windows) начинает скачиваться.


Код в файле теста:

def test_correct_app_should_be_downloaded_on_mac(driver):
page.open(driver)
assert page.is_downloaded_app_correct(driver, TestData.app_for_mac_format), \
"Downloaded App has incorrect for Mac format"

Код в файле Data:

TestData.sa_app_for_mac_format = ".dmg"

Код в файле Page:

def is_downloaded_app_correct(driver, expected_format):
before = os.listdir('/Users/anna/Downloads')
download_button = Button(driver, download_button_locator)
download_button.click()
max_wait = 30
current_wait = 0
while current_wait < max_wait:
after = os.listdir('/Users/anna/Downloads')
change = set(after) - set(before)
lenght = len(change)
if lenght == 1:
file_name = str(change.copy())
print(file_name)
if file_name.index(expected_format):
return True
else:
current_wait += 1
time.sleep(1)
print("The download has not started within " + str(max_wait) + "seconds.")
return False

Такой вариант подоедет для локальной проверки на компьютере или если вы можете точно определить путь, где сохраняется скачиваемый 
файл. Если же для прогонки автотестов используется BrowserStack - то с опрелением папки возникнут проблемы (BrowserStack 
не даст вам такой информации).
В таком случае код надо будет написать по-другому. Об этом моя следующая статья.
Как получить имя скачиваемого файла при использовании BrowserStack - СТАТЬЯ.


Как найти путь, куда сохраняется файл на Mac, читайте ТУТ.


Самые полезные ФУНКЦИИ Пайтона

 1)  PRINT - выводит на печать переменную, указанную в скобках print (average)   2)  LEN - посчитать количество элементов в списке student...