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

Фотография

Написать несложный скрипт


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

#1 vitlage

vitlage

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

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Гладкий Виталий

Отправлено 02 марта 2011 - 11:23

Здравствуйте, нужно автоматизировать обычный Windows калькулятор, написать скрипт в SilkTest, который будет делать такие действия:
1. проверить sqrt
2. 2+2
3. 1/х
Очень нужно, заранее благодарю)
  • 0

#2 Int_21h

Int_21h

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Александр

Отправлено 17 октября 2011 - 11:28

Выглядеть код должен примерно так:

[ ] window Calc = MainWin("$C:\WINDOWS\system32\calc.exe")
[-] testcase Calculator() appstate none
	[ ] Calc.SetActive()
	[ ] //Standard skin
	[ ] Calc.Menu("#2").MenuItem("#1").Pick()
	[ ] //SQRT
	[ ] Calc.PushButton("#3").Click()
	[ ] Calc.TextField("#1").SetText("16")
	[ ] sleep(2)
	[ ] INTEGER iFirst = Val(Calc.TextField("#1").GetText())
	[ ] Calc.PushButton("#9").Click()
	[ ] sleep(2)
	[ ] INTEGER iLast=Val(Calc.TextField("#1").GetText())
	[ ] INTEGER iRes=iLast*iLast
	[-] if(iFirst==iRes)
		[ ] Print("sqrt passed! {iLast} * {iLast} = {iFirst}")
	[-] else
		[ ] Print("sqrt failure! {iLast} * {iLast} != {iFirst}")
	[ ] //2+2
	[ ] Calc.PushButton("#3").Click()
	[ ] sleep(2)
	[ ] Calc.TextField("#1").SetText("2")
	[ ] Calc.PushButton("#26").Click()
	[ ] sleep(2)
	[ ] Calc.TextField("#1").SetText("2")
	[ ] INTEGER iValue = Val(Calc.TextField("#1").GetText())
	[ ] Calc.PushButton("#27").Click()
	[ ] sleep(2)
	[ ] INTEGER iSum = Val(Calc.TextField("#1").GetText())
	[ ] INTEGER iEtalon = 4
	[-] if(iEtalon == iSum)
		[ ] Print("Passed! {iValue} + {iValue} = {iSum}")
	[-] else
		[ ] Print("Failured! {iValue} + {iValue} != {iSum}")
	[ ] //1/x
	[ ] Calc.PushButton("#3").Click()
	[ ] Calc.TextField("#1").SetText("1")
	[ ] sleep(2)
	[ ] INTEGER iUp = Val(Calc.TextField("#1").GetText())
	[ ] Calc.PushButton("#8").Click()
	[ ] sleep(2)
	[ ] LIST of INTEGER liValue = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
	[ ] INTEGER i = RandInt(1, ListCount(liValue))
	[ ] Calc.TextField("#1").SetText("{liValue[i]}")
	[ ] sleep(2)
	[ ] INTEGER iDown = Val(Calc.TextField("#1").GetText())
	[ ] Calc.PushButton("#27").Click()
	[ ] sleep(2)
	[ ] INTEGER iCalcRes = Val(Calc.TextField("#1").GetText())
	[ ] INTEGER iResult = iUp/iDown
	[-] if(iResult == iCalcRes)
		[ ] Print("Passed! {iUp} / {iDown} = {iResult}")
	[-] else
		[ ] Print("Failured! {iUp} / {iDown} != {iResult}")



Или так:


[ ] //included files
[ ] use "decl.inc"
[ ] use "product.inc"
[ ] 
[ ] 
[ ] //project scripts
[ ] 
[ ] 
[-] testcase db0000() appstate none //Set Standard mode, Move to 0,0 desctop coordinates
	[ ] wMain.SetActive()
	[ ] wMain.Menu("#2").MenuItem("#1").Check()
	[ ] RECT rPosition = wMain.GetRect()
	[ ] Desktop.BeginDragAt(1, rPosition.xPos+50, rPosition.yPos+10)
	[ ] Desktop.EndDragAt(50, 10)
[ ] 
[-] testcase db0001() appstate none //test SQRT function. Use SetText()
	[ ] wMain.SetActive()
	[ ] wMain.PushButton("#3").Click()
	[ ] wMain.TextField("#1").SetText("16")
	[ ] INTEGER iFirst = Val(wMain.TextField("#1").GetText())
	[ ] wMain.PushButton("#9").Click()
	[ ] INTEGER iRes = Val(wMain.TextField("#1").GetText())
	[ ] INTEGER iEtalon = iFirst/iRes
	[-] if(iEtalon == iRes)
		[ ] Print("SQRT passed! {iRes} * {iRes} = {iFirst}")
	[-] else
		[ ] Print("SQRT failured! {iRes} * {iRes} != {iFirst}")
	[ ] 
[-] testcase db0002() appstate none //test "+" function. Use LIST
	[ ] wMain.SetActive()
	[ ] wMain.PushButton("#3").Click()
	[ ] INTEGER i
	[-] for i=1 to 3
		[ ] LIST of STRING liButton= {"#5", "#6", "#7", "#11", "#12", "#13", "#17", "#18","#19","#23"}
		[ ] INTEGER iID = RandInt(1, ListCount(liButton))
		[-] if(i==1)
			[ ] wMain.PushButton("{iID}").Click()
			[ ] INTEGER iValue1 = Val(wMain.TextField("#1").GetText())
			[ ] wMain.PushButton("#26").Click()
		[-] else
			[ ] wMain.PushButton("{iID}").Click()
			[ ] INTEGER iValue2 = Val(wMain.TextField("#1").GetText())
			[ ] wMain.PushButton("#27").Click()
			[ ] INTEGER iRes = Val(wMain.TextField("#1").GetText())
	[ ] INTEGER iEtalon = iValue1+iValue2
	[-] if(iRes == iEtalon)
		[ ] Print("' + ' passed! {iValue1} + {iValue2} = {iEtalon}")
	[-] else
		[ ] Print("' + ' failured! {iValue1} + {iValue2} = {iEtalon}")
		[ ] 
[-] testcase db0003() appstate none //test "/" function. Use CaptureBitmap(). Etalon made by myself
	[ ] wMain.SetActive()
	[ ] // 100 / 85
	[ ] wMain.PushButton("#3").Click()
	[ ] wMain.PushButton("#17").Click() 
	[ ] wMain.PushButton("#23").Click() 
	[ ] wMain.PushButton("#23").Click()
	[ ] wMain.PushButton("#8").Click() 
	[ ] wMain.PushButton("#6").Click() 
	[ ] wMain.PushButton("#12").Click()
	[ ] wMain.PushButton("#27").Click()
	[ ] //Screen
	[ ] wMain.TextField("#1").CaptureBitmap("c:\res.bmp")
	[ ] BOOLEAN bValue = SYS_CompareBitmap ("c:\res.bmp", "c:\etalon.bmp")
	[-] if(bValue)
		[ ] Print(" '/'  passed!")
	[-] else
		[ ] Print("' / ' failured!")


  • 1

#3 Enki

Enki

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

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

Отправлено 02 ноября 2011 - 18:16

Int_21h
Здравствуйте! Возникло пару вопросов..
Во фрейме вы используете мультитеги? Или тут {iID} чудно преобразуется в #iID? Выглядит как обращение по кепшену..

			[ ] wMain.PushButton("{iID}").Click()
			...
			[ ] wMain.PushButton("#26").Click()


И ещё.. В соседней теме вы писали:

Код далеко не идеален, но для старта пойдет.

Что можно сделать, чтобы приблизить этот код к идеалу? =) Во втором варианте, например.
Спасибо.
  • 0

#4 Int_21h

Int_21h

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Александр

Отправлено 06 ноября 2011 - 16:07

Рассмотрим весь блок кода:

for i=1 to 3
                [ ] LIST of STRING liButton= {"#5", "#6", "#7", "#11", "#12", "#13", "#17", "#18","#19","#23"}
                [ ] INTEGER iID = RandInt(1, ListCount(liButton))
                [-] if(i==1)
                        [ ] wMain.PushButton("{iID}").Click()
                        [ ] INTEGER iValue1 = Val(wMain.TextField("#1").GetText())
                        [ ] wMain.PushButton("#26").Click()

Тут оглашен лист айдишек кнопок калькулятора. Элементы этого листа рандомно вставляются в переменную iID. Так у нас получится:
wMain.PushButton("#5").Click()
wMain.PushButton("#6").Click()
......
wMain.PushButton("#19").Click()
wMain.PushButton("#23").Click()

Последняя строка данного куска кода нажимает на кнопку "+".
Обращаться по кепшену не советую ибо несет за собой много проблем.


Что можно сделать, чтобы приблизить этот код к идеалу? =) Во втором варианте, например.


Для второго варианта - переписать весь код:))
  • 1

#5 Enki

Enki

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

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

Отправлено 08 ноября 2011 - 15:10

Рассмотрим весь блок кода:
...

Да, спасибо, был невнимателен.

Обращаться по кепшену не советую ибо несет за собой много проблем.

И тем не менее в данном случае кажется весьма удобным использовать кепшены для набора чисел (передаваемых в функцию, например). Разве нет?
Хотя другой такой пример придумать тяжело, да.

Для второго варианта - переписать весь код:))

Вооот как.. А не могли бы вы хотя бы очертить основные направления? =)
  • 0

#6 Int_21h

Int_21h

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Александр

Отправлено 11 ноября 2011 - 22:21

То что удобно не всегда хорошо)
все что пришло в голову - использовать локаторы, передача айди, кепшенов, вин айди, сделать с помощью ВинАпи, работать со статическим набором. Думаю. еще можно выделить множество способов, но зачем через зад лазить?

Хотя, как писать, это дело каждого. Вопрос не завалит ли проект такой скрипт?

======================================
Ну как сказать) Садитесь да пишите)))
Направления как такого нет)))
  • 0


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

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