【问题标题】:UFT - Random DateUFT - 随机日期
【发布时间】:2020-06-18 21:24:17
【问题描述】:

我创建此代码确实会在一个范围内获得一个随机日期。我从一些站点支持它,并在其他站点的堆栈中提供了答案。这没有问题,但是当我尝试在一个函数上传递时,会一直出错。

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

错误:

功能:

Function DataRandom(StartDate, EndDate)

    Dim StartDate, EndDate

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

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

End Function

我认为问题在于我传递变量的方式。关于日期函数的一些事情,我错过了它来声明,使变量接受日期?是 UFT 系统本身的问题吗?

已经尝试过,但没有成功。

谢谢你, 最好的问候

【问题讨论】:

  • 你需要从函数返回结果,即DataRandom = dtmRandomDate。目前您的DataRandom() 函数无法返回值。

标签: vbscript hp-uft


【解决方案1】:

从测试中可以看出它在第 130 行失败;

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

这里有两个问题:

  1. 函数DateRandom() 期望返回一个值,但函数定义不包含返回结果的语句,并且其行为更像是子过程而不是函数。要解决此问题,请将函数定义更改为;

    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")
    

正如out in the comments 所指出的,Randomize 语句应该只运行一次,而不是在每次调用函数时运行。理想情况下,您应该有一个处理脚本设置和初始化的Init() 过程。

【讨论】:

  • 嗨@Lankymart,首先让我感谢您的回答。帮助很多。当您是编码方面的学徒时,就会发生这种情况,是的,我忘了返回结果。关于我没有忘记的双引号,只是在这里传错了。如果将来有人需要,我会将全部功能留在 Libray 中集成。再次感谢。问候。
  • 没问题@Rik,很高兴它有帮助。
  • 请从函数中移除对 Randomize 的调用。 (Randomize 每个会话/运行应该只调用一次,因为它会初始化生成器)
【解决方案2】:

所以得到 Lankymart 的帮助,这是 libray 的最后一个功能。 更改变量,或根据需要声明。

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

【讨论】:

  • 请从函数中移除对 Randomize 的调用。 (Randomize 每个会话/运行应该只调用一次,因为它会初始化生成器)
  • 完成@Ekkehard.Horner。但这意味着,如果我不在会话/运行的其他任何地方调用 Randomize,我将不得不调用它来调用它,对吗?
  • 对于简单的脚本,一开始就调用Randomize;对于更复杂的情况,使用一个标志来确保它只被调用一次。
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 2010-09-16
  • 2017-05-24
  • 2020-01-13
  • 2021-07-30
  • 2021-01-26
  • 2014-09-25
相关资源
最近更新 更多