Эмулировать события клавиатуры [дублировать]

К сожалению, @Html.DropDownListFor() ведет себя несколько иначе, чем другие помощники при рендеринге элементов управления в цикле. Об этом ранее сообщалось как о проблеме с CodePlex (не уверен, что ее ошибка или просто ограничение)

. Это 2 варианта для решения этой проблемы, чтобы обеспечить выбор правильной опции на основе свойства модели

Вариант 1 (с использованием EditorTemplate)

Создайте пользовательский EditorTemplate для типа в коллекции. Создайте парциальное значение в /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml (обратите внимание, что имя должно соответствовать имени типа

@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration

, а затем в главном представлении передать SelectList в EditorTemplate как additionalViewData

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems })
  ...

Вариант 2 (сгенерируйте новую SelectList на каждой итерации и установите selectedValue)

В этом параметре ваше свойство CodeTypeItems должно быть IEnumerable<GenericIdNameType>, а не SelectList (или просто сделать codeTypes общедоступным свойством). Затем в главном представлении

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)

Сторона примечания: нет необходимости использовать new { id = "Configurations[0].HelperCodeType" - метод DropDownListFor() уже сгенерированный атрибут id

22
задан Nakilon 20 September 2013 в 16:54
поделиться

4 ответа

Я делаю автоматическое тестирование в Python. Я имею тенденцию использовать следующее:

http://www.tizmoi.net/watsup/intro.html Изменить: Ссылка мертва, архивная версия: https: http://www.mayukhbose.com /python/IEC/index.php

Я не всегда (почти никогда) не моделирую нажатия клавиш и движения мыши. Обычно я использую COM для установки значений объектов Windows и вызова их методов .click ().

Вы можете отправить сигналы нажатия клавиш с помощью этого:

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("^a") # CTRL+A may "select all" depending on which window's focused
shell.SendKeys("{DELETE}") # Delete selected text?  Depends on context. :P
shell.SendKeys("{TAB}") #Press tab... to change focus or whatever

Все это в Windows. Если вы находитесь в другой среде, я понятия не имею.

24
ответ дан dagur 19 August 2018 в 08:04
поделиться
  • 1
    Полезно знать: для использования win32com вам необходимо установить расширения Python для Windows . – maGo 12 November 2013 в 14:47
  • 2
    Чтобы активировать программу, к которой вы хотите отправить ключи, используйте shell.AppActivate("Notepad") (замените Блокнот) – dagur 11 November 2014 в 09:46
  • 3
    Это отлично работало - спасибо @dagur за подсказку о фокусе окна! Мне также понадобилось моделирование событий мыши - этот anser был лучшим для меня и хорошо работал с этим решением клавиатуры. – brichins 4 August 2016 в 17:09

Возможно, вы ищете Sendkeys ?

SendKeys - это модуль Python для Windows, который может отправить одно или несколько комбинаций клавиш или комбинаций клавиш в активное окно.

кажется, что это только окна

Также у вас есть pywinauto (скопировано из моего SO ответа )

pywinauto - это набор модулей с открытым исходным кодом (LGPL) для использования Python в качестве драйвера автоматизации GUI для операционных систем на базе Windows NT (NT / W2K / XP).

и пример с веб-страницы

> from pywinauto import application
> app = application.Application.start("notepad.exe")
> app.notepad.TypeKeys("%FX")
> app.Notepad.MenuSelect("File->SaveAs")
> app.SaveAs.ComboBox5.Select("UTF-8")
> app.SaveAs.edit1.SetText("Example-utf8.txt")
> app.SaveAs.Save.Click()
15
ответ дан Community 19 August 2018 в 08:04
поделиться
  • 1
    SendKeys отображаются только для Python 2.x. Более того, его сайт сейчас мертв – raffamaiden 3 October 2017 в 11:30

Вы можете использовать библиотеку PyAutoGUI для Python, которая работает на Windows, macOS и Linux.

Мышь

Вот простой код для перемещения мышь на середину экрана:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

Страница документов: Функции управления мышью .

Связанный вопрос: Управление мышью с помощью Python .

Клавиатура

Пример:

pyautogui.typewrite('Hello world!')                 # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25)  # prints out "Hello world!" with a quarter second delay after each character

Страница документов: Функции управления клавиатурой .

< hr>

More reading: Управление клавиатурой и мышью с помощью GUI-автоматизации (глава 18 электронной книги).

Связанные вопросы:

0
ответ дан kenorb 19 August 2018 в 08:04
поделиться

pyautogui - отличный пакет для отправки ключей и автоматизации нескольких задач, связанных с клавиатурой и мышью. Проверьте Управление клавиатурой и мышью с помощью GUI Automation и документации PyAutoGUI .

7
ответ дан Mitesh Budhabhatti 19 August 2018 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: