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

Фотография

TestComplete и Excel - как получить значение ячейки


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

#1 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 19 января 2012 - 11:44

Добрый день, уважаемые.
Помогите новичку в освоении этого нелегкого процесса - написания скриптов.
Есть файл Excel, содержащий таблицу из 3х колонок и 1000 строк.
Задача состоит в том, чтобы в блокнот записать значения ячеек из строки с номером, полученным случайным образом.
Я пробовала извлечь значения ячеек при помощи DDT-драйвера, в результате получаю только первую строку:

function Test()
{
var ddtExcel = DDT.ExcelDriver(Project.Path + "\\Stores\\fiogen.xlsx", "fiogen", true);
var s1, s2, s3;
var w1 = Sys.Process("notepad").Form("Безымянный — Блокнот");
var w2 = w1.Window("Edit", "", 1)


s1 = ddtExcel.Value("fam");
s2 = ddtExcel.Value("name");
s3 = ddtExcel.Value("otc");
w2.Keys(s1 + ' ' + s2 + ' ' + s3 + '[Enter]');

Log.Message(s1+ ' ' + s2 + ' ' + s3);

DDT.CloseDriver(ddtExcel.Name);
}
А вот как получить значения из случайной строки - понять не могу...
Может вместо этого нужно что-то другое использовать?
Помогите, плиз.
  • 0

#2 idunin

idunin

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Илья Владимирович
  • Город:Москва


Отправлено 19 января 2012 - 11:57

Добрый день, уважаемые.
Помогите новичку в освоении этого нелегкого процесса - написания скриптов.
Есть файл Excel, содержащий таблицу из 3х колонок и 1000 строк.
Задача состоит в том, чтобы в блокнот записать значения ячеек из строки с номером, полученным случайным образом.
Я пробовала извлечь значения ячеек при помощи DDT-драйвера, в результате получаю только первую строку:

function Test()
{
var ddtExcel = DDT.ExcelDriver(Project.Path + "\\Stores\\fiogen.xlsx", "fiogen", true);
var s1, s2, s3;
var w1 = Sys.Process("notepad").Form("Безымянный — Блокнот");
var w2 = w1.Window("Edit", "", 1)


s1 = ddtExcel.Value("fam");
s2 = ddtExcel.Value("name");
s3 = ddtExcel.Value("otc");
w2.Keys(s1 + ' ' + s2 + ' ' + s3 + '[Enter]');

Log.Message(s1+ ' ' + s2 + ' ' + s3);

DDT.CloseDriver(ddtExcel.Name);
}
А вот как получить значения из случайной строки - понять не могу...
Может вместо этого нужно что-то другое использовать?
Помогите, плиз.


Насколько помню в TC7 не было возможности обратиться к конкретной записи. Можно последовательно считать все, в какой-нибудь массив и уже потом случайным образом выбирать данные для записи.
Может, конечно, в TC8 что изменилось.
  • 0

#3 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 19 января 2012 - 13:36

DDTDriver возвращает значения текущей строки (по умолчанию - 1й); для перевода указателя на следующую строку надо использовать метод Next.

Но я бы вам посоветовала работать с Excel через его COM-объект Excel.Application. Как-то так:
// Disclaimer: код не проверен

var Excel = Sys.OleObject("Excel.Application")
Excel.Visible = true;
Excel.Workbooks.Open("C:\\MyFile.xls");
rowCount = Excel.ActiveSheet.UsedRange.Rows.Count;
row = <сгенерировать рандомное число от 1 до rowCount>;
strValue = Excel.Cells(row, 1).Value.toString();

  • 0

#4 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 19 января 2012 - 17:55

А я когда-то даже писал класс на JScript для работы с Excel-файлами через OLE
http://autotestgroup...terials/17.html
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#5 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 19 января 2012 - 18:01

А хотя перечитал пост... Судя по всему, вам достаточно просто добавить переход на следующую строку при чтении таблицы. Посмотрите примеры работы с DDT вот здесь http://tctutorial.ru/datadriven
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#6 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 20 января 2012 - 06:21

А хотя перечитал пост... Судя по всему, вам достаточно просто добавить переход на следующую строку при чтении таблицы. Посмотрите примеры работы с DDT вот здесь http://tctutorial.ru/datadriven


Я сделала по аналогии с примером из указанного Вами учебника, в итоге у меня последовательно выводились все записи из файла, а мне нужна одна, причем не какая то конкретная, а случайная.
Функцию для получения случайного числа из диапазона (m,n) нашла - ее значение будет являться номером нужной строки. Теперь думаю, в какое место в коде ее "присобачить". Попробую копать в сторону, предложенную modbear, вдруг получится...

P.S. Хотела сказать "спасибо" за учебник по ТС - для меня он оказался очень полезен.
  • 0

#7 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

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

После недолгих раздумий пришла к следующему коду (по крайней мере, радует, что он работает:)):

var Exl = Sys.OleObject("Excel.Application");
var rowCount;
var strV1, strV2, strV3;

Exl.Visible = false;
Exl.Workbooks.Open("С:\\fiogen.xlsx");
rowCount = Exl.ActiveSheet.UsedRange.Rows.Count;

row = Math.floor( Math.random() * rowCount ) + 1;

strV1 = Exl.Cells(row, 1).Value.toString();
strV2 = Exl.Cells(row, 2).Value.toString();
strV3 = Exl.Cells(row, 3).Value.toString();
Log.Message(strV1 + ' ' + strV2 + ' ' + strV3)

и каждый раз при запуске в логе имею случайную строку из файла...Супер!
Всем спасибо!
  • 0


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

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