UFT - 随机日期

问题描述 投票:0回答:1

我创建这个代码做得到一个随机的日期在一个范围。我支持它从一些网站和答案在这里堆栈从别人。这工作白没有问题,但当我试图通过在一个函数一直给错误。

StartDate = "01-01-1950"
EndDate= "31-12-2000"

StartDate = CDate(StartDate)
EndDate= CDate(EndDate)

Randomize
dtmRandomDate = DateValue((EndDate- StartDate + 1) * Rnd + StartDate )


Browser("DashBoard_2").Page("DashBoard").WebEdit("txtBornDate").Set dtmRandomDate

该错误。

enter image description here

该函数。

Function DataRandom(StartDate, EndDate)

    Dim StartDate, EndDate

    StartDate = CDate(StartDate)
    EndDate= CDate(EndDate)

    Randomize
    dtmRandomDate = EndDate((dtmEndDate - StartDate+ 1) * Rnd + StartDate)

End Function

我认为问题出在我传递变量的方式上。关于日期函数的一些东西,我没有声明,使变量接受日期?是UFT系统本身的问题吗?

已经尝试了一些事情,但没有工作。

谢谢你,最好的祝愿

vbscript hp-uft
1个回答
2
投票

从测试中可以看出,它是失败的130行。

a = DataRandom(01-02-2020, 03-04-2022)

这里有两个问题

  1. 这个函数 DateRandom() 期待返回一个值,但函数定义中没有包含返回结果的语句,因此表现得更像一个子过程而不是函数。要解决这个问题,请将Function的定义改为。

    Function DataRandom(StartDate, EndDate)
        Dim StartDate, EndDate
    
        StartDate = CDate(StartDate)
        EndDate = CDate(EndDate)
    
        Randomize 'Should be initialised once rather than with each call to the function.
        dtmRandomDate = DateValue((EndDate - StartDate + 1) * Rnd + EndDate)
    
        DateRandom = dtmRandomDate 'This line returns the result.
    End Function
    
  2. 传递给函数的参数在语法上有问题,因为你使用了 CDate() 将数值转换为正确的 Date 你应该把值作为字符串来传递,这只需要在测试中把每个参数用双引号封装起来。这只需要在测试中用双引号封装每个参数。

    a = DataRandom("01-02-2020", "03-04-2022")
    

同时,也正如指出的 吐槽Randomize 语句应该只运行一次,而不是每次调用函数时都运行。理想情况下,你会有一个 Init() 过程,处理脚本的设置和初始化。


1
投票

所以得到了Lankymart的帮助,最后的函数要放在libray.Change变量,或者根据你的需要声明。

Public StartDate, EndDate

Function DateRandom(StartDate, EndDate)


    Dim dtmRandomDate, dtmStartDate, dtmEndDate

    dtmStartDate = CDate(StartDate)
    dtmEndDate = CDate(EndDate)

    dtmRandomDate = DateValue((dtmEndDate - dtmStartDate + 1) * Rnd + dtmStartDate)

    DateRandom = dtmRandomDate 'Returning the result

End Function
© www.soinside.com 2019 - 2024. All rights reserved.