Selecting specific slots in radscheduleview

3 posts, 0 answers
  1. Shashi
    Shashi avatar
    25 posts
    Member since:
    Feb 2011

    Posted 29 May 2012 Link to this post

    Hello,

    Our dev team recently updated the Scheduling page in our application to use a RadScheduleView instead of a Radscheduler.  This has broken most of our tests that were written to work with the radscheduler and we are working through the issues to fix them.  This post is to ask you about one of the issues.

    One of our tests was creating an appointment by selecting a specific row in the Scheduler view and then invoking the Create Appointment command from the right-mouse menu associated with that row (the time slot values are used to populate the Time fields in the dialog that shows up).  

    The selected row was computed based on the desired time (which was one of about 6 possible values that the test would pick from in each run).  Here is the code:

    [CodedStep(@"RightClick on Item250Border", RequiresSilverlight = true)]
    public void CreateAppointment_CodedStep()
    {
        //declare variables and set to null
        int beforeAppCount = Convert.ToInt16(GetExtractedValue("BeforeAppointmentCount")); //before count
        int appTimeIndex = beforeAppCount % 5;
        // Appointment start times will cycle between 10:00 AM, 1:00 pm, 2:00pm, 3:15 PM and 4:00 PM
        switch (appTimeIndex)
        {
            case 0:
                // RightClick on Item154Border - 10:00 am
                Log.WriteLine("Creating appointment at 10:00 AM");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item154Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 100, 45, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
            case 1:
                // RightClick on Item202Border - 1:00pm
                Log.WriteLine("Creating appointment at 1 PM");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item202Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 99, 55, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
            case 2:
                // RightClick on Item218Border - 2:00pm
                Log.WriteLine("Creating appointment at 2 PM");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item218Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 99, 30, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
            case 3:
                // RightClick on Item238Border - 3:15pm
                Log.WriteLine("Creating appointment at 3:15 PM");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item238Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 99, 40, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
            case 4:
                // RightClick on Item250Border -  4:00pm
                Log.WriteLine("Creating appointment at 4 PM");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item250Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 100, 40, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
            default:  // this code should never be executed as long as the number of appointment time options is 3
                // RightClick on Item154Border - 10:00 am
                Log.WriteLine("Creating appointment at 10 AM (default)");
                Pages.QAAUTOSYNC1228183918.SilverlightApp.Item154Border.User.Click(ArtOfTest.WebAii.Core.MouseClickType.RightClick, 100, 45, ArtOfTest.Common.OffsetReference.TopLeftCorner, ArtOfTest.Common.ActionPointUnitType.Percentage, ((System.Windows.Forms.Keys)(0)));
                break;
        }               
    }

    The above code worked with the Radscheduler because each row was associated with a different Border object (which was enclosed in a TimeSlotItem object).  However, I am finding that is not the case with the Radscheduler view.  When I record the right mouse click (prior to taking it to code), I seem to be getting the same id no matter which row I pick. 

    When I look at the DOM, I don't see Border elements for any of the rows - instead I am seeing TimeRulerLine elements inside a TimeRulerLinesPanel element.  Each of the TimeRuler elements does have a Border element - but the recorder is apparently not finding them or not seeing them as different objects.

    Question:  Given the above, is it possible to replicate the test functionality (as it worked with Radscheduler) to work with Radscheduleview?  If so, what do I need to do?

    Attached are snapshots of the scheduler page with Radscheduleview (radschedulerview.jpg) and radscheduler (radscheduler.jpg) with the respective DOM shown alongside.

    I appreciate your help in this regard.  A prompt response would be very much appreciated as the test in question is a smoke test and needs to be fixed as soon as possible.  Please let me know if you have further questions.

    Thanks,
    Shashi  
  2. Shashi
    Shashi avatar
    25 posts
    Member since:
    Feb 2011

    Posted 04 Jun 2012 Link to this post

    Does anyone have any suggestions for this?

    Thanks,
    Shashi
  3. Cody
    Admin
    Cody avatar
    3354 posts

    Posted 04 Jun 2012 Link to this post

    Hi,

    I apologize for the delay getting back to you.

    This is difficult because we have not yet created a control wrapper for the RadScheduleView control. I suggest using code like this to find the time slot desired and click or act on it.

    bool found = false;
     
    MySampleTests.Pages.TelerikScheduleViewForPage.SilverlightAppElement app = Pages.TelerikScheduleViewFor.SilverlightApp;
    IList<FrameworkElement> timeslots = app.Find.AllByType("TimeRulerItem");
    System.Drawing.Rectangle appointments = app.Find.ByType("AppointmentsPanel").GetScreenRectangle();
     
    Assert.IsTrue(timeslots.Count > 0);
    foreach (FrameworkElement slot in timeslots)
    {
        if (slot.TextBlockContent.Contains("8:00 AM"))
        {
            slot.EnsureClickable();
            System.Drawing.Rectangle slotRectangle = slot.GetScreenRectangle();
            ActiveBrowser.Desktop.Mouse.HoverOver(appointments.Width / 2 + appointments.X, slotRectangle.Height / 4 + slotRectangle.Y);
            found = true;
            break;
        }
    }
    Assert.IsTrue(found);

    Regards,
    Cody
    the Telerik team
    Quickly become an expert in Test Studio, check out our new training sessions!
    Test Studio Trainings
Back to Top