I would like to know if it's possible to parameterize the Handle 'FileUpload' dialog.
What I have is a list of around 20 files in an Excel sheet. The sheet contains other columns of data that I don't want to interact with. The sheet is not bound as a data source as I don't want to iterate through all the rows. I just need to select one row at random, abstract the file name & path from the appropriate column, and upload it. What is the best way of doing this? I've read the 'Random Row' guide in the on-line help, so I think I can select the random element, but I'm still uncertain how to apply it to this particular kind of test.
Thanks,
Nigel Edwards, Transition Computing.
4 Answers, 1 is accepted
Once you get your random value from the Excel file, set it as an extracted value in the same coded step. See the second code block here for an example.
Now you can use that variable to data bind the File Upload step, using the FileUploadPath property. See here for an example.
Anthony
the Telerik team
Test Studio Trainings
Here is my test line in Test Studio:
Handle 'FileUpload' dialog. - DataDriven: [$(fileToUse)]
(My settings include a project reference to Microsoft.Office.Interop.Excel, Version =14.0.0.0)
Now here's my code behind. First the Imports:
Imports Telerik.WebAii.Controls.Html
Imports Telerik.WebAii.Controls.Xaml
Imports Telerik.WebAii.Controls.Xaml.Wpf
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Linq
Imports ArtOfTest.Common.UnitTesting
Imports ArtOfTest.WebAii.Core
Imports ArtOfTest.WebAii.Controls.HtmlControls
Imports ArtOfTest.WebAii.Controls.HtmlControls.HtmlAsserts
Imports ArtOfTest.WebAii.Design
Imports ArtOfTest.WebAii.Design.Execution
Imports ArtOfTest.WebAii.ObjectModel
Imports ArtOfTest.WebAii.Silverlight
Imports ArtOfTest.WebAii.Silverlight.UI
Imports Microsoft.Office.Interop
Now the Sub:
<CodedStep("New Coded Step")> _
Public Sub SelectRandomFile()
Dim random As New Random()
Dim num As Integer = random.[Next](1, 44)
Dim input As String = "C:\Users\edwardni\Documents\Test Studio Projects\Base\Data\BaseData.xlsx"
Dim app As New Microsoft.Office.Interop.Excel.Application()
Dim inputBook As Microsoft.Office.Interop.Excel.Workbook = app.Workbooks.Open(input, 0, False, 5, "", "", False, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", True, False, 0, True, False, False)
Dim inputSheet As Microsoft.Office.Interop.Excel.Worksheet = DirectCast((inputBook.Worksheets.Item("UI_Schemes")), Microsoft.Office.Interop.Excel.Worksheet)
'''The next three lines (tried one at a time, of course!) all produce the same error log result '''
'Dim selection As String = TryCast(DirectCast(inputSheet.Cells(num, 3), Microsoft.Office.Interop.Excel.Range).Text, String)
'Dim selection As Object = TryCast(DirectCast(inputSheet.Cells(num, 3), Microsoft.Office.Interop.Excel.Range).Text, String)
Dim selection As Object = GetExtractedValue(TryCast(DirectCast(inputSheet.Cells(num, 3), Microsoft.Office.Interop.Excel.Range).Text, String))
SetExtractedValue("fileToUse", selection)
app.Quit()
app = Nothing
End Sub
What the log reports is:
'13/02/2012 16:23:00' - Using .Net Runtime version: '4.0.30319.235' for tests execution.'13/02/2012 16:23:00' - Starting execution....'13/02/2012 16:23:08' - Detected custom code in test. Locating test assembly: Base.dll.'13/02/2012 16:23:08' - Assembly Found: C:\Users\edwardni\Documents\Test Studio Projects\Base\bin\Base.dll'13/02/2012 16:23:08' - Loading code class: 'SetupRandomLogo'.'13/02/2012 16:23:08' - Failure detected during execution. Details:
------------------------------------------------------------
'13/02/2012 16:23:08' - System.NullReferenceException: Object reference not set to an instance of an object. at ArtOfTest.Common.Design.Data.DataResolver.GetMatchValue(Match match, DataRow data, Boolean throwError) at ArtOfTest.Common.Design.Data.DataResolver.GetMatchString(String expression, DataRow data, Boolean error) at ArtOfTest.Common.Design.Extensibility.Descriptors.AutomationDescriptor.BindData(String propertyName) at ArtOfTest.Common.Design.Extensibility.Descriptors.AutomationDescriptor.BindData[T](String propertyName) at ArtOfTest.WebAii.Design.IntrinsicTranslators.Descriptors.FileUploadDialogHandlerDescriptor.InitializeDialogs(Browser browser) at ArtOfTest.WebAii.Design.Execution.ExecutionContext.SetDialogMonitoring(AutomationStepList steps, TestType testType) at ArtOfTest.WebAii.Design.Execution.ExecutionContext.SetDialogMonitoring(Test test) at ArtOfTest.WebAii.Design.Execution.ExecutionContext.SetDialogMonitoring() at ArtOfTest.WebAii.Design.Execution.ExecutionEngine.InternalExecuteTestIteration(Object codeBehindInstance) at ArtOfTest.WebAii.Design.Execution.ExecutionEngine.InternalExecuteTest(Test test, TestResult initializationResult) at ArtOfTest.WebAii.Design.Execution.TestExecuteProxy.ExecuteTest(ExecuteTestCommand command)
I'm sure I'm missing something really obvious, but I can't spot it (excusable, since I'm not and never have been, a developer!) I look forward to your reply.
Thanks,
Nigel Edwards, Transition Computing.
That's an odd error indeed. I was not able to reproduce it using your code. I have a few more questions/suggestions to troubleshoot this:
- Confirm that the coded step comes before the Upload Dialog Handler step.
- Confirm the DataEnabled Test Property is checked. Although the test is not data driven, this is required for the Upload step to work properly with the extracted value.
- Confirm the error occurs on the Handle Dialog step.
Also add some lines to your code to ensure the value is extracted from the correct row and column from the Excel sheet:
Dim
selection
As
String
= TryCast(
DirectCast
(inputSheet.Cells(num, 2), Microsoft.Office.Interop.Excel.Range).Text,
String
)
SetExtractedValue(
"fileToUse"
, selection)
'--Start new code
Dim
d
As
Object
= GetExtractedValue(
"fileToUse"
)
Log.WriteLine(d.ToString())
'--End new code
app.Quit()
app =
Nothing
Regards,
Anthony
the Telerik team
Test Studio Trainings
Your points:
Your last point doesn't actually apply. I'll raise a ticket, as you suggest, to take this furhter, but thanks for your help to this point. :)