По вопросу «что мне делать с этим» может быть много ответов.
Более «формальный» способ предотвращения таких ошибок при разработке применяя дизайн по контракту в вашем коде. Это означает, что при разработке вы должны установить инварианты класса и / или даже предпосылки для функции и .
Короче говоря, инварианты класса гарантируют, что в вашем классе будут некоторые ограничения, которые не будут нарушены при нормальном использовании (и, следовательно, класс будет not получить в несогласованном состоянии). Предпосылки означают, что данные, данные как входные данные для функции / метода, должны соответствовать установленным ограничениям и никогда не нарушать их, а постулаты означают, что вывод функции / метода должен соответствовать установленным ограничениям снова не нарушая их. Условия контракта никогда не должны нарушаться во время выполнения программы без ошибок, поэтому дизайн по контракту проверяется на практике в режиме отладки, а отключен в выпусках , чтобы максимизировать развитую производительность системы.
Таким образом, вы можете избежать случаев NullReferenceException
, которые являются результатом нарушения установленных ограничений. Например, если вы используете свойство объекта X
в классе, а затем попытаетесь вызвать один из его методов, а X
имеет нулевое значение, то это приведет к NullReferenceException
:
public X { get; set; }
public void InvokeX()
{
X.DoSomething(); // if X value is null, you will get a NullReferenceException
}
Но если вы установите «свойство X никогда не должно иметь нулевого значения» в качестве предпосылки для метода, вы можете предотвратить описанный ранее сценарий:
//Using code contracts:
[ContractInvariantMethod]
protected void ObjectInvariant ()
{
Contract.Invariant ( X != null );
//...
}
По этой причине Код Контракт существует для приложений .NET.
В качестве альтернативы дизайн по контракту может быть применен с использованием утверждений .
ОБНОВЛЕНИЕ: Стоит отметить, что этот термин был придуман Бертраном Майером в связи с его дизайном языка программирования Эйфеля .
Дайте Autohotkey другой взгляд, из ваших требований он подходит для задания.
Альтернативно проверять автоматизацию пользовательского интерфейса от Microsoft: http://msdn.microsoft.com/en-us/library /ms747327.aspx, а также белый: http://white.codeplex.com/
Sikuli - это визуальная технология для автоматизации и тестирования графических пользовательских интерфейсов (GUI) с использованием изображений (снимки экрана). Sikuli включает в себя Sikuli Script, визуальный скриптовый API для Jython и Sikuli IDE, интегрированную среду разработки для написания визуальных сценариев с снимками экрана. Sikuli Script автоматизирует все, что вы видите на экране, без поддержки внутреннего API. Вы можете программно управлять веб-страницей, настольным приложением Windows / Linux / Mac OS X или даже приложением для iphone или Android, работающим в симуляторе или через VNC.
blockquote>Посмотрите на Сикули , это сработало для меня.
Посмотрите на это https://pywinauto.github.io/
Вы можете использовать скрипт python для управления вашим окном.
Преимущество:
Вы можете использовать библиотеку PyAutoGUI для Python, которая работает в Windows, macOS и Linux.
Должно допускать временные задержки между действиями.
blockquote>Пример для ввода с четверть-секундной паузой между каждой клавишей:
import pyautogui pyautogui.typewrite('Hello world!', interval=0.25)
Вот пример, чтобы установить паузу в 2,5 секунды после каждого вызова PyAutoGUI:
pyautogui.PAUSE = 2.5
Должен допускать композицию сложного ввода клавиатуры.
blockquote>Контрольные функции для контроля клавиатуры , где вы можете использовать
pyautogui.typewrite
для ввода чего-либо. Вы можете передавать переменные, чтобы разрешить сложный ввод на клавиатуре.Определение события для запуска действий.
blockquote>Вы можете использовать функции поиска визуально найти что-то на экране и сделать условие на основе этого в рамках простого цикла.
Решение должно быть бесплатным для коммерческого использования.
blockquote>лицензированный под BSD, который разрешает коммерческое использование.
См. также:
RIATest не использует Python, но в противном случае подходит для счета. Это похоже на Selenium, но для Win32 и Интернета.
RIATest использует API автоматизации пользовательского интерфейса Windows и может управлять любым приложением Windows, которое правильно использует GUI для автоматизации пользовательского интерфейса (включая все собственные и .NET-приложения).
Отказ от ответственности: Я работаю в Cogitek, компании RIATest.
Взгляните на Automa - он написан на Python. Он может использоваться как автономный инструмент или как библиотека Python в ваших собственных скриптах:
from automa.api import *
Он позволяет автоматизировать любое приложение Windows с помощью таких команд, как щелчок, печать, запись и т. Д.
Некоторые примеры сценариев автоматизации можно найти в http://www.getautoma.com/blog/category/ui-automation-examples
Отказ от ответственности : Я один из разработчиков Automa.