2 votes

UFT - Date aléatoire

J'ai créé ce code pour obtenir une date aléatoire dans une plage. Je me base sur certains sites et sur les réponses d'autres sites ici à stack. Cela fonctionne sans problème, mais lorsque j'essaie de passer à une fonction, je reçois une erreur.

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

L'erreur :

enter image description here

La fonction :

Function DataRandom(StartDate, EndDate)

    Dim StartDate, EndDate

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

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

End Function

Je pense que le problème vient de la façon dont je passe les variables. Quelque chose sur les fonctions de date que je manque pour déclarer, faisant la variable accepter la date ? C'est quelque chose à propos du système UFT lui-même ?

J'ai déjà essayé quelques trucs, mais ça n'a pas marché.

Merci, Meilleures salutations

2voto

Lankymart Points 2522

On peut voir sur le test que ça échoue à la ligne 130 ;

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

Il y a deux problèmes ici :

  1. La fonction DateRandom() s'attend à renvoyer une valeur mais la définition de la fonction ne contient pas d'instruction pour renvoyer le résultat et se comporte plus comme une sous-procédure que comme une fonction. Pour résoudre ce problème, changez la définition de la fonction en ;

    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. Les arguments passés à la fonction sont syntaxiquement problématiques, car vous utilisez CDate() pour convertir les valeurs en valeurs correctes Date vous devez passer les valeurs sous forme de chaînes de caractères. Ce qui nécessite simplement d'encapsuler chaque argument entre guillemets dans le test.

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

Aussi, comme indiqué dans les commentaires le site Randomize ne doit être exécutée qu'une seule fois plutôt qu'à chaque appel de la fonction. Idéalement, vous devriez avoir un Init() procédure qui s'occupe de la configuration et de l'initialisation du script.

1voto

Rik Points 115

Donc, en obtenant l'aide de Lankymart, la fonction finale à mettre à libray. Changez les variables, ou déclarez selon vos besoins.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X