Перейти к содержимому

Фотография

Вызов функции из self-testing app


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 nonameunit

nonameunit

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 29 мая 2012 - 08:43

Добрый день.

Пытаюсь разобраться с фичей self-testing application. Идея стандартна - использовать её для того что бы сделать юай к фреймворку.

Возник вопрос. Если в некотором сьюте "Suite", в проекте "Project", а именно в его script unit'е "Functions" есть функция "MyFunc" можно ли её вызвать в self-testing app и каим образом будет выглядеть строчка кода с вызовом?

UPD
Было найдено что то подходящее, но обе строчки падают с ошибкой TargetInvocationException:
Integration["RunRoutine"].Call("Project","Functions","MyFunc");
Integration["RunRoutine"]("Project","Functions","MyFunc");

Сообщение отредактировал nonameunit: 29 мая 2012 - 10:22

  • 0

#2 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 29 мая 2012 - 17:32

Здравствуйте.

Здесь бы весь код посмотреть, в частности что есть Integration в данном случае (тип, переменная), находится ли ТС в состоянии запуска и т.п. А работает ли у вас стандартный пример из раздела справки Calling Script Routines via COM?

Когда мне надо было работать с ТС по COM, я предпочитал использовать класс Connect, с которым работать много легче.
  • 1
С уважением,
Дмитрий

#3 nonameunit

nonameunit

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 30 мая 2012 - 07:54

deleted
  • 0

#4 nonameunit

nonameunit

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 30 мая 2012 - 07:54

Собственно вот так выглядит код.

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TestClass tcls = new TestClass();
            ThreadStart thrd_start = new ThreadStart(tcls.RunTest);
            Thread thrd = new Thread(thrd_start);
            thrd.Start();
        }
    }

    public class TestClass : Connect
    {
        public void RunTest()
        {
            string s = Path.GetFullPath("..\\..\\TCProject\\WinFormsApp.pjs");

            Connect.RunTest("Test Self-Testing App", "Main", s);

            Connect.Integration["RunRoutine"].Call("Main", "Functions", "ErrorDialog");
            Connect.Integration["RunRoutine"]("Main", "Functions", "ErrorDialog");

            //var p = Sys["Process"]("MainFormProcess");
            //var f = Sys["WinFormsObject"]("MainForm");
            //var b = Sys["WinFormsObject"]("buttonError");
            //var res = b["Click"]();

            //var bb = Aliases["WinFormsObject"]("buttonError")["Click"]();

            Connect.StopTest();
        }
    }

при работе через COM т.е. ссылаясь на
using System.Runtime.InteropServices;
using TestComplete;
все работает отлично, спасибо что напомнили что и так можно.

А вот попытки работать с ТС через
using AutomatedQA.script;
using AutomatedQA.TestComplete;
ничего не получается. Строки с вызовом скрипта падают с TargetInvocationException, а в строках где есть обращение к контролу просто не находит ни процесс ни форму.
  • 0

#5 nonameunit

nonameunit

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 30 мая 2012 - 08:00

В аттаче все включая ТС проект и приложение для тестов.

Прикрепленные файлы


  • 0

#6 nonameunit

nonameunit

    Новый участник

  • Members
  • Pip
  • 4 сообщений

Отправлено 01 июня 2012 - 06:55

Здравствуйте.

Здесь бы весь код посмотреть, в частности что есть Integration в данном случае (тип, переменная), находится ли ТС в состоянии запуска и т.п. А работает ли у вас стандартный пример из раздела справки Calling Script Routines via COM?

Когда мне надо было работать с ТС по COM, я предпочитал использовать класс Connect, с которым работать много легче.


Нет идей почему стандартный пример не работает? (в ТС контролы находятся, а из С# кода написанного по примеру - нет)
  • 0

#7 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 04 июня 2012 - 16:08

Connect.RunTest("Test Self-Testing App", "Main", s);
Integration["RunRoutine"].Call("Main", "Functions", "ErrorDialog");Integration["RunRoutine"]("Main", "Functions", "ErrorDialog");

Согласно справке TestComplete'а по методу RunRoutine:

Call this method only if TestComplete is not running any tests, else, an error will occur.

Это значит, что как только вы запустили тест используя Connect.RunTest, вы не можете выполнять функции используя RunRoutine. Используйте метод CallMethod объекта Runner.
Connect.RunTest("Test Self-Testing App", "Main", s);
Connect.Runner["CallMethod"]("Functions.ErrorDialog");
Connect.StopTest();

  • 0
С уважением,
Дмитрий


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных