Executing javascript in coded step

12 posts, 0 answers
  1. Jake
    Jake avatar
    2 posts
    Member since:
    Jun 2013

    Posted 11 Jun 2013 Link to this post

    Hello,

    I am looking for the simplest way to execute a javascript function within a coded step.
    I have been looking at possible Ajax solutions, as well as System.Web.UI possibilities, but I'm wondering what Telerik recommends for doing this specific task in Test Studio.

    I also have seen http://www.telerik.com/automated-testing-tools/support/documentation/user-guide/write-tests-in-code/advanced-topics/javascript/invoking-javascript.aspx but that seems to be just about invoking it if the function already exists on the page. I am looking to execute a new javascript function, client side.

    Thanks!
  2. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 13 Jun 2013 Link to this post

    Hello Jake,

    I am sorry our documentation is not more clear about this, but you can actually put any JavaScript you want in the InvokeScript call. Thus in reality code like this:

    Actions.InvokeScript("Test3();")

    The JavaScript engine is literally running the JavaScript "Test3();" which is faithly doing as instructed, find the method Test3 and running it.

    I hope this helps.

    Regards,
    Cody
    Telerik
    Free summer webinars on advanced web automation tactics hosted by Jim Holmes & Adam Goucher.
    Reserve your seat today!
  3. Jake
    Jake avatar
    2 posts
    Member since:
    Jun 2013

    Posted 25 Jun 2013 Link to this post

    Can you show me an example of executing client side javascript? I can not create methods inside of the page itself.
    In the documentation it says: "// Assume our page has JavaScript method Test1() & Test2() & Test3()"
    I have a javascript method that is executed through a bookmark.
  4. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 25 Jun 2013 Link to this post

    Hi Jake,

    It's pretty straight forward. You can invoke any random JavaScript using Test Studio code like this:

    Actions.InvokeScript("alert('test')")

    This will actually cause the Alert dialog box to be displayed by the browser. Or you can call any JavaScript method that is already loaded in the browser i.e. contained in the HTML loaded by the browser using code like this:

    Actions.InvokeScript("MyJavascriptFunc('parm1', 'parm2')") 

    Regards,
    Cody
    Telerik
    Free summer webinars on advanced web automation tactics hosted by Jim Holmes & Adam Goucher.
    Reserve your seat today!
  5. Kiroloss
    Kiroloss avatar
    4 posts
    Member since:
    Nov 2015

    Posted 01 Dec 2015 Link to this post

    Hi cody,

      Why is this form not working? I'm getting all kind of exceptions?

    Actions.InvokeScript("window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {alert('Error occured:'  + errorMsg); return false;}");

     Or is test studio now able to run a function?

  6. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 01 Dec 2015 Link to this post

    Hi Kiroloss,

    Test Studio runs the JavaScript contained in Actions.InvokeScript just like you had opened the browsers developer window and entered the JavaScript directly into the console window as shown in the attached screenshot. I put your entire line of code into a test and ran it. I did not experience any problems, as shown in the second attached screenshot, like you explained. Can you show me what exceptions you are getting? Also does the same JavaScript work when you enter it into the browsers console window?


    Regards,
    Cody
    Telerik
     
    The New Release of Telerik Test Studio Is Here! Download, install,
    and send us your feedback!
  7. Kiroloss
    Kiroloss avatar
    4 posts
    Member since:
    Nov 2015

    Posted 01 Dec 2015 in reply to Cody Link to this post

    Below is a test result of a Coded ui testing. Just to be clear im using Test Studio to do come automated testing and i'm trying to catch any and every javascript error that occurs and doe it once in my testing. You see when it tries to execute the line i added for you above i get this error, while trying to test my application. Below is one result.

    Also I throw an exception on purpose in the test to see if it gets caught.


    this is my test code:

    var actions = Manager.Current.ActiveBrowser.Actions;
    string jsRetValue = actions.InvokeScript("window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {alert('Error occured:' + errorMsg); return false;}");
    Actions.AnnotateMessage(jsRetValue);
    Log.WriteLine(jsRetValue);


    Below is the test result and you see the output is strange, even though i'm suppose to get a (false) as a return.

    Overall Result: Pass
    ------------------------------------------------------------
    '12/1/2015 3:03:25 PM' - Executing test: 'WebTest', path: 'JavaScript Handler\WebTest.tstest.'
    '12/1/2015 3:03:25 PM' - Using .Net Runtime version: '4.0.30319.42000' for test execution. Build version is '2015.3.1015.0'.
    '12/1/2015 3:03:25 PM' - Starting execution....
    '12/1/2015 3:03:27 PM' - Detected custom code in test. Locating test assembly: TestProject1.dll.
    '12/1/2015 3:03:27 PM' - Assembly Found: C:\Project\Telerik Coded UI\AutomatingQA\bin\TestProject1.dll
    '12/1/2015 3:03:27 PM' - Loading code class: 'TestProject1.WebTest'.
    ------------------------------------------------------------
    ------------------------------------------------------------
    '12/1/2015 3:03:27 PM' - Using 'InternetExplorer' version '11.0' as default browser.
    '12/1/2015 3:03:29 PM' - 'Pass' : 1. [WebTest_CodedStep] : Navigate to : 'mywebsite.'
    '12/1/2015 3:03:29 PM' - 'Pass' : 2. Enter text 'ittest2' in 'UserNameText'
    '12/1/2015 3:03:29 PM' - 'Pass' : 3. Keyboard (KeyPress) - Tab (1 times) on 'UserNameText'
    '12/1/2015 3:03:30 PM' - 'Pass' : 4. Enter text 'test' in 'PasswordPassword'
    '12/1/2015 3:03:30 PM' - 'Pass' : 5. Keyboard (KeyPress) - Enter (1 times) on 'PasswordPassword'
    '12/1/2015 3:03:30 PM' - 'Pass' : 6. [WebTest_CodedStep1] : Enter text 'test' in 'PasswordPassword'
    '12/1/2015 3:03:32 PM' - 'Pass' : 7. Click 'UtilityLink'
    '12/1/2015 3:03:33 PM' - 'Pass' : 8. Click 'InvoiceDataLink'
    '12/1/2015 3:03:34 PM' - 'Pass' : 9. Click 'Div'
    '12/1/2015 3:03:34 PM' - 'Pass' : 10. Enter text '0' in 'UsagePeriodFromText'
    '12/1/2015 3:03:34 PM' - 'Pass' : 11. Keyboard (KeyPress) - Enter (1 times) on 'UsagePeriodFromText'
    '12/1/2015 3:03:34 PM' - 'Pass' : 12. Enter text '0' in 'UsagePeriodFromText'
    '12/1/2015 3:03:35 PM' - 'Pass' : 13. Click 'GetDataButtonButton'
    '12/1/2015 3:03:35 PM' - 'Pass' : 14. Select 'ByValue' option 'Electric' on 'DlEnergyTypesSelect'
    '12/1/2015 3:03:35 PM' - LOG: System.__ComObject ************************************************
    '12/1/2015 3:03:35 PM' - 'Pass' : 15. [WebTest_CodedStep2] : New Coded Step
    '12/1/2015 3:03:35 PM' - 'Pass' : 16. [WebTest_CodedStep3] : Select 'ByValue' option 'mmbtu' on 'DlTypesSelect'
    '12/1/2015 3:03:35 PM' - 'Pass' : 17. Click 'Div'
    ------------------------------------------------------------
    '12/1/2015 3:03:35 PM' - Overall Result: Pass
    '12/1/2015 3:03:35 PM' - Duration: [0 min: 8 sec: 141 msec]
    ------------------------------------------------------------
    '12/1/2015 3:03:36 PM' - Test completed!
  8. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 01 Dec 2015 Link to this post

    Hello Kiroloss,

    ...i'm trying to catch any and every javascript error that occurs...

    I'm sorry but Test Studio cannot catch JavaScript errors. The JavaScript that you are invoking doesn't throw an error. It only creates a function object and what you see in the log is the string representation of that object.

    ...when it tries to execute the line i added for you above i get this error...

    I don't see any error being thrown at all. The test log looks perfectly normal to me. I see the test passed which is also expected.

    Regards,
    Cody
    Telerik
     
    The New Release of Telerik Test Studio Is Here! Download, install,
    and send us your feedback!
  9. Kiroloss
    Kiroloss avatar
    4 posts
    Member since:
    Nov 2015

    Posted 01 Dec 2015 in reply to Cody Link to this post

    I actually figure the issue. the function i created, actually do catch javascript errors. The issue is it has to be on the current active browser. So i had to click on the page i wanted to test than add this function and it works. Is there anyway it can be global on the test?
  10. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 01 Dec 2015 Link to this post

    Hello Kiroloss,

    I'm sorry but I don't quite understand what you mean by "Global on the test"? You can only run JavaScript in a browser means it must be the current active browser. Test Studio itself doesn't run the JavaScript it just sends JavaScript to the browser for execution.

    Can you clarify which mean by "global on the test"? What sort of behavior are you looking for?

    Regards,
    Cody
    Telerik
     
    The New Release of Telerik Test Studio Is Here! Download, install,
    and send us your feedback!
  11. Kiroloss
    Kiroloss avatar
    4 posts
    Member since:
    Nov 2015

    Posted 01 Dec 2015 in reply to Cody Link to this post

    It's okay Cody, i was confusing. I found my answer on your form. Thanks. 
  12. Cody
    Admin
    Cody avatar
    3360 posts

    Posted 01 Dec 2015 Link to this post

    Hello,

    Excellent! Thank you for the update.

    Regards,
    Cody
    Telerik
     
    The New Release of Telerik Test Studio Is Here! Download, install,
    and send us your feedback!
Back to Top