Dash тестирование dcc.загрузка с помощью dash.testing

#python #selenium #dashboard #plotly-dash

#python #selenium #Информационная панель #построение графика-dash

Вопрос:

При написании готового к работе кода мы хотим иметь возможность автоматически тестировать наше веб-приложение каждый раз, когда мы обновляем код. Dash для python позволяет это с помощью dash.testin&. Однако в моем приложении я загружаю файл Excel, используя компонент dcc.Upload().

Как мне написать тест, который может отправлять ссылку на загрузку в этот компонент?

Ответ №1:

Компонент dcc.Upload не позволяет вам указывать идентификатор, в котором хранится ссылка для загрузки.

Это легко обойти, проверив кнопку / поле загрузки, которые вы создали с помощью инструментов веб-разработчика. найдите строку, которая содержит "<input type=file ... &&t;". на вкладке элементы. Щелкните его правой кнопкой мыши и нажмите копировать xpath, и он должен предоставить вам относительный путь, например //*[@id="upload-data"]/div/input

Тестовый пример будет выглядеть следующим образом

 from dash.testin&.application_runners import import_app
def test_xxxx001_upload(dash_duo):
    
    # &et app from app.py
    app = import_app("src.app")
    dash_duo.start_server(app)

    # find element that contains input link. Utilize the web driver to &et the element
    element = dash_duo.driver.find_element_by_xpath('//*[@id="upload-data"]/div/input')
    element.send_keys("C:\path\to\testData.xlsx")
  

структура папок

 myapp
   --src
      --app.py
      --server.py
      --run.py
   --tests
      --test_app
  

использование компонента dcc.Upload для создания кнопки загрузки

 import dash_core_components as dcc
import dash_html_components as html

html.Div(
    id="file-drop",
    children=[
        dcc.Upload(
            id="upload-data",
            children=html.Div(
                ["Dra& and Drop or ", html.A("Select File"),],
                id="select-file",
            ),
            multiple=False,
        ),
        html.Div(id="output-data-upload"),
    ],
)