<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Konstantin Petkov's blog</title>
    <description>Konstantin Petkov's blog</description>
    <link>http://blogs.telerik.com/KonstantinPetkov/Posts.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <item>
      <title>The UI Automation Support Highest Requirements &amp;ndash; UIA Verify Tool Update with Preconditions Failure</title>
      <description>&lt;p&gt;Overall, we got quite good impression from the UIA Verify tool, &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-28/UI_Automation_Testing_with_UIA_Verify.aspx"&gt;I wrote about&lt;/a&gt; last week. Yet, there is an issue that provoked me to &lt;a href="http://www.codeplex.com/UIAutomationVerify/SourceControl/ListDownloadableCommits.aspx"&gt;download the source&lt;/a&gt; and modify the tool behavior.&lt;/p&gt;
&lt;p&gt;As a tester, I believe the automated tests should pass only when you get the full test running through all the actions and verifications. The original UIA Verify though marks as passed all the tests which preconditions are not met. That doesn't help much if you need to verify all the scenarios pass successfully, does it?&lt;/p&gt;
&lt;p&gt;I've modified the source so now the failed preconditions cause test failures. Basically, there are only two small changes in the test library - in &lt;i&gt;TestObject&lt;/i&gt; and &lt;i&gt;UIAVerifyLogging&lt;/i&gt; classes. If you are interested, just browse for &lt;em&gt;&lt;span style="color: #0080ff"&gt;IncorrectElementConfigurationForTestException&lt;/span&gt;&lt;/em&gt; within those classes.&lt;/p&gt;
&lt;p&gt;In future, I think of modifying the visual results adding a new condition into the whole logic. It will be generally better to separate the precondition failures from the regular ones.&lt;/p&gt;
&lt;p&gt;You can download the updated TestLibrary from the link below:&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://blogs.telerik.com/files/UIATestLibrary_PreconditionsFail.zip" target="_blank"&gt;Download&lt;/a&gt;]&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-11-07/The_UI_Automation_Support_Highest_Requirements_ndash_UIA_Verify_Tool_Update_with_Preconditions_Failure.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-11-07/The_UI_Automation_Support_Highest_Requirements_ndash_UIA_Verify_Tool_Update_with_Preconditions_Failure.aspx</comments>
      <guid isPermaLink="false">ec3832fe-66bc-42e4-881a-87556b365fe2</guid>
      <pubDate>Fri, 07 Nov 2008 09:49:56 GMT</pubDate>
    </item>
    <item>
      <title>UI Automation Support in RadControls for Silverlight Q3 2008</title>
      <description>&lt;p&gt;The new release of &lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;RadControls for Microsoft Silverlight&lt;/a&gt; is out with a couple of new controls and tons of improvements in the old components. In case you've missed, the new demos are uploaded and available &lt;a href="http://demos.telerik.com/silverlight/"&gt;here&lt;/a&gt;. You may need to delete your browser cache if you still don't see the new cool home page:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationSupportinRadControlsforSilve_E4D8-NewQSFHome_2.sflb"&gt;&lt;img width="644" height="428" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="NewQSFHome" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationSupportinRadControlsforSilve_E4D8-NewQSFHome_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Along with &lt;a href="http://www.telerik.com/products/silverlight/whats-new.aspx"&gt;the other improvements&lt;/a&gt;, the UI Automation support in Silverlight controls suite is greatly enhanced. Now the following components (I've ordered them alphabetically) officially support UI Automation:&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;ComboBox/ComboBoxItem&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;Expander&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;Menu/MenuItem&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;NumericUpDown&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;PanelBar/PanelBarItem&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;ProgressBar&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;Slider&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;TabControl/TabItem&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;TreeView/TreeViewItem&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;- &lt;i&gt;Window&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;What's next?&lt;/p&gt;
&lt;p&gt;Our &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-28/UI_Automation_Testing_with_UIA_Verify.aspx"&gt;test results&lt;/a&gt; look good so far, but we still have many ideas on improving the UI Automation support of those controls. Since &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/08-11-07/The_UI_Automation_Support_Highest_Requirements_ndash_UIA_Verify_Tool_Update_with_Preconditions_Failure.aspx" target="_blank"&gt;our requirements&lt;/a&gt; on the quality of UI Automation controls are quite high, we will keep working on that until we get the things perfect. &lt;/p&gt;
&lt;p&gt;The team has also started the UIA implementation over the rest of the controls so the next official update (probably in a month) will definitely make the above list longer. Meanwhile, should you have particular request, please &lt;a href="http://www.telerik.com/account/support-tickets/new-support-ticket.aspx"&gt;drop us a line&lt;/a&gt; and we will prioritize the upcoming tasks accordingly.&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-11-07/UI_Automation_Support_in_RadControls_for_Silverlight_Q3_2008.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-11-07/UI_Automation_Support_in_RadControls_for_Silverlight_Q3_2008.aspx</comments>
      <guid isPermaLink="false">425a2ce7-1b74-4ac8-8aee-001450335a16</guid>
      <pubDate>Fri, 07 Nov 2008 09:47:24 GMT</pubDate>
    </item>
    <item>
      <title>UI Automation Testing with UIA Verify</title>
      <description>&lt;p&gt;As I mentioned in my previous post "&lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-20/UI_Automation_Accessibility_in_Silverlight_2_tools_and_resources_summary.aspx"&gt;UI Automation/Accessibility in Silverlight 2, tools and resources summary&lt;/a&gt;", &lt;a href="http://www.codeplex.com/UIAutomationVerify"&gt;UIA Verify&lt;/a&gt; is one of the current options for UI Automation testing of controls and applications. The tool was published by the Microsoft UI Automation team about 7 months ago and according to the release page, it was downloaded about thousand of times so far. Still, I didn't find any public articles regarding its advantages not because the tool is useless, quite the opposite! So I decided to describe the tool's features briefly and I hope you'll enjoy the tutorial.&lt;/p&gt;
&lt;p&gt;First of all, please note that UIA Verify supports WPF as well as Silverlight! This is a huge advantage for us @Telerik as our purpose is to provide complete UI Automation support both for &lt;a href="http://www.telerik.com/products/wpf/overview.aspx"&gt;RadControls for WPF&lt;/a&gt; and &lt;a href="http://www.telerik.com/products/silverlight/overview.aspx"&gt;RadControls for Silverlight&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Next, UIA Verify comes with intuitive GUI. Should you run the executable, you see the picture below:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-UIAVerify_Initial_2.sflb"&gt;&lt;img width="625" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="UIAVerify_Initial" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-UIAVerify_Initial_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The windows tree is represented to the left. You can browse through the windows and the elements selecting those you'd like to test or you can switch the "Hover Mode" on:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-HoverMode_2.sflb"&gt;&lt;img width="644" height="407" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="HoverMode" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-HoverMode_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;As you can see from the modes, one can put Visual UIA Verify always on top and use the focus tracking option for the element in interest. Also, there are some modes of highlighting the element plus an easy navigation through the tree of elements.&lt;/p&gt;
&lt;p&gt;Now I'm running &lt;a href="http://blogs.telerik.com/ValentinStoychev/Posts/08-10-14/RadControls_for_Silverlight_2_-_RTW_update.aspx"&gt;our latest Silverlight 2 Release Candidate&lt;/a&gt; &lt;a href="http://demos.telerik.com/silverlight/"&gt;live demos&lt;/a&gt;. I load the demos of &lt;b&gt;RadNumericUpDown&lt;/b&gt;, one of the first Silverlight components provided with UI Automation support. After I have focused it I hold CTRL and get it selected in UIA Verify tree (with the help of the "Hover Mode" option). The selected element is an editable input and its parent, the actual NumericUpDown control, is recognized as Spinner. So far, so good!&lt;/p&gt;
&lt;p&gt;Let's take a look at the element's automation properties. The right panel in the UI gives you all the information regarding the UI Automation support of the element:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-SpinnerProperties_2.sflb"&gt;&lt;img width="575" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="SpinnerProperties" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-SpinnerProperties_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;So our NumericUpDown is recognized through its automation ID; it is focusable via the keyboard; it has the corresponding class name; it has &lt;a href="http://msdn.microsoft.com/en-us/library/ms744847.aspx"&gt;ControlType.Spinner&lt;/a&gt; type set, etc. Yes, this is the same information one can get with the help of &lt;a href="http://msdn.microsoft.com/en-us/library/ms727247.aspx"&gt;UI Spy&lt;/a&gt; that I mentioned in my list of tools summary posted a week ago.&lt;/p&gt;
&lt;p&gt;The Patterns section shows that our control implements the RangeValuePattern &lt;a href="http://msdn.microsoft.com/en-us/library/ms752362.aspx"&gt;as expected&lt;/a&gt;. I expand the tree to check the values of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.automation.rangevaluepattern_members.aspx"&gt;pattern members&lt;/a&gt;. Additionally, I run the SetValue method to see whether the NumericUpDown's value can be set. I successfully get the new value straight into the demo:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-SetValue_RangeValuePattern_2.sflb"&gt;&lt;img width="567" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="SetValue_RangeValuePattern" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-SetValue_RangeValuePattern_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now let's focus on the automated tests that are a part of UIA Verify. The tool comes with a base of tests for each automated element! Those are grouped by priority as you can see from the screen shot. There are tests specific to each UI Automation control type as well as some concerning the pattern. You can either run all the tests for this element, control type and pattern, or execute some specific tests:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-RunSpecificTests_2.sflb"&gt;&lt;img width="633" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="RunSpecificTests" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-RunSpecificTests_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Before running all the tests for our NumericUpDown control, I recommend turning on the "Always on top" mode. This way you'll have the tool always visible no matter which window is focused during the test execution for example. Running the tests opens a new window representing the progress:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-TestsRunning_2.sflb"&gt;&lt;img width="632" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="TestsRunning" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-TestsRunning_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Finally, we get our Overall test results:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-OverallTestResults_2.sflb"&gt;&lt;img width="633" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="OverallTestResults" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-OverallTestResults_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The table is clear. Those links to the left load all the passed, failed and the caused unexpected error tests. The failed ones are documented so one can follow the test output. Those two tests fail because of AutomationId duplication along with improperly labeled input:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-FailedTest_2.sflb"&gt;&lt;img width="637" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="FailedTest" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationtestingwithUIAVeify_888B-FailedTest_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Okaaay, I have to report the issues now. Thanks, UIA Verify!&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-28/UI_Automation_Testing_with_UIA_Verify.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-28/UI_Automation_Testing_with_UIA_Verify.aspx</comments>
      <guid isPermaLink="false">db38c551-b760-4998-93d4-f5c9aa12706e</guid>
      <pubDate>Tue, 28 Oct 2008 02:49:58 GMT</pubDate>
    </item>
    <item>
      <title>UI Automation/Accessibility in Silverlight 2, tools and resources summary</title>
      <description>&lt;p&gt;The purpose of this post is to summarize the tools and resources for UI Automation/Accessibility testing in &lt;a href="http://www.microsoft.com/presspass/press/2008/oct08/10-13Silverlight2PR.mspx?rss_fdn=Press%20Releases"&gt;Silverlight 2&lt;/a&gt; available at the present moment as well as to share a few details on what's expected in the nearest future. There are a lot of resources on the web about Microsoft &lt;a href="http://en.wikipedia.org/wiki/Microsoft_UI_Automation"&gt;UI Automation framework&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Active_Accessibility"&gt;Active Accessibility&lt;/a&gt; so I'm not going to put any general information here. Still, you can refer to the list at the end of the post for additional information.&lt;/p&gt;
&lt;p&gt;The UI Automation testing tools are quite important to developers and testers (like me) that are interested in Silverlight/WPF test and UI automation. Let me start with the &lt;b&gt;UI Spy&lt;/b&gt;, a part of the Microsoft Windows SDK, which displays the UI Automation characteristics of the elements on each window in a tree view. The image below shows a typical view from &lt;a href="http://msdn.microsoft.com/en-us/library/ms727247.aspx"&gt;UI Spy&lt;/a&gt; over Silverlight page. I've put &lt;a href="http://www.telerik.com/products/silverlight/controls/slider/overview.aspx"&gt;RadSlider&lt;/a&gt; there to look at its UI Automation properties (please note that's RadSlider for &lt;a href="http://blogs.telerik.com/ValentinStoychev/Posts/08-10-14/RadControls_for_Silverlight_2_-_RTW_update.aspx"&gt;Silverlight 2 RTW update we announced last week&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationAccessibilityinSilverlight2t_71E1-RadSliderInUISpy_2.sflb"&gt;&lt;img width="610" height="484" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="RadSlider in UI Spy" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-UIAutomationAccessibilityinSilverlight2t_71E1-RadSliderInUISpy_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;UI Spy allows easy search for the exact element of interest by just hovering the control on the page and holding CTRL key. You can also locate the element on the demo by enabling the location option (the tool surrounds your element with red boundaries as shown in the picture). Additionally, read about &lt;a href="http://msdn.microsoft.com/en-us/library/ms727257.aspx"&gt;the Spy tasks on MSDN&lt;/a&gt;. You might be also interested in what &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2007/05/29/WPF-_2B00_-UISpy-_3D00_-Accessibility-testing.aspx"&gt;Tamir Khason shared about UI Spy and Accessibility in WPF&lt;/a&gt; some months ago.&lt;/p&gt;
&lt;p&gt;UI Spy can be used in conjunction with advanced UI Automation testing tools like &lt;b&gt;White&lt;/b&gt;. The project is available on &lt;a href="http://www.codeplex.com/white"&gt;CodePlex&lt;/a&gt;. White provides rich API based on UI Automation and supports Win32, Windows Forms, WPF and SWT (Java) based applications. In the latest version labeled 0.17, &lt;i&gt;White does not support Silverlight &lt;/i&gt;(how could that be?!), but that is &lt;a href="http://www.codeplex.com/white/WorkItem/View.aspx?WorkItemId=2669" target="_blank"&gt;scheduled for the next release&lt;/a&gt;, which can come up in a few weeks. I will prepare another post concerning the &lt;a href="http://www.telerik.com/products/silverlight/overview.aspx"&gt;RadControls for Silverlight 2&lt;/a&gt; UI Automation testing via UI Spy and White as soon as I'm able to test the SL extension of White.&lt;/p&gt;
&lt;p&gt;Back in March 2008, the MS UI Automation team posted their testing framework on CodePlex as well. It is called &lt;a href="http://www.codeplex.com/UIAutomationVerify"&gt;UI Automation Verify&lt;/a&gt; (&lt;b&gt;UIA Verify&lt;/b&gt;) and comes with a complete test library and GUI tool. There are built-in automation element and control tests, and I'm also excited about the option of extending the available test library. Needless to say, the testing framework usability is enormously increased by that option! I'm looking forward to getting more details about the framework and having some experience to share on this blog.&lt;/p&gt;
&lt;p&gt;Let's move ahead to the MSAA tools. You can find some available ones as &lt;b&gt;Active Accessibility 2.0 SDK Tools &lt;/b&gt;- &lt;i&gt;Event Watcher&lt;/i&gt;, &lt;i&gt;Accessibility Explorer&lt;/i&gt; and &lt;i&gt;Inspect Objects&lt;/i&gt;. Find the bits for free download &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3755582A-A707-460A-BF21-1373316E13F0&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Along with the UIA Verify framework mentioned above, Microsoft published their UI Accessibility Checker &lt;a href="http://www.codeplex.com/AccCheck"&gt;(AccChecker) on CodePlex&lt;/a&gt;. &lt;b&gt;AccChecker&lt;/b&gt; comes with GUI tool, API for the test case creation as well as a "Screen Reader" feature, which can catch the UI's programmatic access if broken. Hmm, does "AccChecker" sound the same as "AccExplorer" for you too? Find a comparison between both tools on AccChecker threads &lt;a href="http://www.codeplex.com/AccCheck/Thread/View.aspx?ThreadId=29197"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Do you want to hear (yes, to hear!) what is displayed on the screen in your Silverlight site and make sure the blind people or those with low vision can hear the expected? &lt;a href="http://www.microsoft.com/enable/training/windowsxp/usingnarrator.aspx"&gt;Use the Narrator Accessibility Speech engine&lt;/a&gt; of your Windows. There is an article describing Narrator as &lt;a href="http://support.microsoft.com/kb/252435"&gt;KB at support.microsoft.com&lt;/a&gt;. You can find the tool under Programs - Accessories - Accessibility group or you can just type "narrator" in Start - Run dialog box.&lt;/p&gt;
&lt;p&gt;I'd like to stop here and invite your comments on the topic. Do you have a favorite tool for UI Automation or do you plan to make your Silverlight site accessible? Feel free to share your experience or impressions. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I've listed some additional resources below:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms753107.aspx"&gt;UI Automation Fundamentals&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc645045(VS.95).aspx"&gt;UI Automation of a Silverlight Custom Control&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://windowsclient.net/wpf/white-papers/wpf-app-quality-guide.aspx#uiautomation"&gt;WPF Application Quality Guide - UI Automation Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2008/03/16/Accessibility-and-UI-Automation-in-Silverlight-2.aspx" target="_blank"&gt;Accessibility and UI Automation in Silverlight 2 by Pete Brown&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.benhall.me.uk/2008/02/project-white-automated-ui-testing.html" target="_blank"&gt;Project White: Automated UI Testing by Ben Hall&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/john_daddamio/archive/2008/04/04/testing-wpf-applications-with-the-white-ui-test-framework.aspx"&gt;Testing WPF applications with the White UI Test framework by John D'Addamio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/gisenberg/archive/2008/07/12/ui-automation-in-silverlight-simulating-user-interactions.aspx"&gt;UI Automation in Siverlight - Simulating User Interactions by Gabriel Isenberg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/gisenberg/archive/2008/07/17/ui-automation-in-silverlight-part-ii-the-easy-way.aspx"&gt;UI Automation in Silverlight - Part II (The Easy Way) by Gabriel Isenberg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/saraford/archive/tags/Accessibility/default.aspx"&gt;Sara Ford WebLog's posts on Accessibility&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/accessibility/default.aspx"&gt;Accessibility Developer Center&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/accessibility/cc188976.aspx"&gt;Microsoft Accessibility Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.accessinteropalliance.org/"&gt;AIA - Accessibility Interoperability Alliance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Hope this summary helps!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;P.S. I've attached UISpy to my post so you don't have to download the whole &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065&amp;amp;displaylang=en" target="_blank"&gt;Windows SDK update&lt;/a&gt; to run the tool.&lt;/p&gt;
&lt;p&gt;&lt;a href="/photos/storage/kpetkov/UISpy.zip"&gt;UISpy.zip&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;[Yours UI Automation addicted]&lt;/p&gt;
&lt;p&gt;-Konstantin&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-20/UI_Automation_Accessibility_in_Silverlight_2_tools_and_resources_summary.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-20/UI_Automation_Accessibility_in_Silverlight_2_tools_and_resources_summary.aspx</comments>
      <guid isPermaLink="false">61bd295f-5443-4771-b60e-3a468f2b6579</guid>
      <pubDate>Mon, 20 Oct 2008 00:54:09 GMT</pubDate>
    </item>
    <item>
      <title>Joining the Silverlight Testing World</title>
      <description>&lt;p&gt;Back in &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/06-12-10/Web_testing_vs_Telerik_--_0_1.aspx"&gt;late 2006&lt;/a&gt; I started this blog, posting content based entirely on the ASP.NET tester's activities. &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-07/I_m_back_again_what_comes_next.aspx" target="_blank"&gt;At the end of summer 2008&lt;/a&gt; I was still completely focused on ASP.NET. You never know what fate will bring you in a month, what about a year or two.&lt;/p&gt;
&lt;p&gt;Since the beginning of September 2008 I joined the Telerik Silverlight team. My main responsibilities are to build the test strategy, organize the work in all terms of quality assurance and help the team of talented developers release &lt;a href="http://www.telerik.com/products/silverlight/overview.aspx"&gt;a great suite of Silverlight controls&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;You have probably already seen the latest nice additions to the tools like &lt;a href="http://blogs.telerik.com/NikolayAtanasov/Posts/08-09-16/RadGauge_for_Silverlight_-_coming_up_with_Q3.aspx"&gt;RadGauge for Silverlight&lt;/a&gt;, the &lt;a href="http://blogs.telerik.com/BoryanaMiloshevska/Posts/08-10-03/Page_Navigation_for_Silverlight_2_RC0.aspx"&gt;Page Navigation framework&lt;/a&gt; and the &lt;a href="http://blogs.telerik.com/ValentinStoychev/Posts/08-10-07/Context_Menu_for_Silverlight_Integration_with_RadTreeView.aspx"&gt;Context Menu for Silverlight&lt;/a&gt; for example. Many more are coming in the next few weeks. However, it's important to work not just on the new tools and features but to put efforts into the tools quality as well. Experience clearly shows that is the way to completely excite our valuable customers.&lt;/p&gt;
&lt;p&gt;Does that mean I'm out of the ASP.NET and you won't see any more ASP.NET content in this blog? Not at all! Along with some folks here I've started a brand new and innovative project related to &lt;a href="http://www.telerik.com/products/aspnet-ajax/overview.aspx"&gt;RadControls for ASP.NET AJAX&lt;/a&gt; testing. The project is in early development stage, so I'll keep the secret for a couple of months more. Also, I'm writing some more topics about the test automation of Telerik ASP.NET components suite, so expect a new content on this shortly.&lt;/p&gt;
&lt;p&gt;Talking about "automation", in Silverlight we've &lt;a href="http://blogs.telerik.com/ValentinStoychev/Posts/08-09-26/Silverlight2_RC0_is_out.aspx"&gt;already announced&lt;/a&gt; our goal to provide full &lt;a href="http://msdn.microsoft.com/en-us/library/ms747327.aspx"&gt;UI Automation&lt;/a&gt; support of our tools for the official release expected within a couple of weeks. Some implementations, concerning the UI Automation support have already been tested and are being available now in the source, i.e. you can expect new controls covering &lt;a href="http://en.wikipedia.org/wiki/Accessibility"&gt;Accessibility&lt;/a&gt; even in the next release candidate.&lt;/p&gt;
&lt;p&gt;I've just realized I've already been performing software &lt;a href="http://en.wikipedia.org/wiki/Test_automation"&gt;test automation&lt;/a&gt; for almost 8 years. Just call me an addict, but I can't live without test automation. ;) In WPF and Silverlight this is entirely new world, so, last but not least, expect posts on that very topic and the tools available for Silverlight/WPF components automation testing to your humble tester's blog in the next months.&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-13/Joining_the_Silverlight_Testing_World.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-10-13/Joining_the_Silverlight_Testing_World.aspx</comments>
      <guid isPermaLink="false">d2466061-c318-42ae-9a67-2f9f057947d1</guid>
      <pubDate>Mon, 13 Oct 2008 02:44:35 GMT</pubDate>
    </item>
    <item>
      <title>RadCalendar for ASP.NET (AJAX) localization and all the necessary to have culture independent automated tests</title>
      <description>&lt;p&gt;First some background:&lt;/p&gt;  &lt;p&gt;Recently I&amp;#8217;ve been working on an interesting task, which required digging into some details in RadCalendar control localization implementation. Due to a customer bug report, I tested the RadCalendar control in a non-English culture for a specific scenario. I also ran the automated tests we had built for the Calendar control and was shocked at the fact that so many tests simply failed. The reason is that these tests expected some certain Calendar element values, which generally depend on the culture you run the control on. I took the challenge to investigate, implement the necessary methods and update the tests so that those can be culture-independent from now on.&lt;/p&gt;  &lt;p&gt;So for those who are interested in RadCalendar localization, this post will clarify which component elements are localized and how. The post lists the main RadCalendar features and properties that the control provides for localization.&lt;/p&gt;  &lt;p&gt;I&amp;#8217;m listing the RadCalendar elements being localized by the culture in use. I&amp;#8217;m also explaining how these elements are formed so that the automated tests can build the necessary values runtime to avoid the culture dependency (attached to the post C# class provides all the helper methods in question). RadCalendar exposes some properties for localization as well as elements formatting, which are also pointed below. &lt;/p&gt;  &lt;p&gt;Let&amp;#8217;s start with the element people immediately find:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Calendar Title:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarTitle_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="139" alt="CalendarTitle" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarTitle_thumb.sflb" width="147" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is simple: by default RadCalendar creates its title by the month name and year. The component provides a couple of properties (&lt;b&gt;TitleSettings&lt;/b&gt;) to change the title: &lt;i&gt;TitleFormat&lt;/i&gt;, &lt;i&gt;TitleAlign&lt;/i&gt;, &lt;i&gt;DateRangeSeparator&lt;/i&gt; (the last for Multi-Month View mode -- see the next point) as well as &lt;i&gt;TitleStyle&lt;/i&gt; group of properties to change the appearance. Read more about the title settings in documentation &lt;a href="http://www.telerik.com/help/aspnet-ajax/calendar_radcalendartitlesettings.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The automated tests access the title by its ID: &lt;i&gt;&amp;lt;RadCalendarID&amp;gt;_Title&lt;/i&gt;. To get the month name by culture, the automated tests call System.Globalization.&lt;b&gt;CultureInfo.DateTimeFormat.GetMonthName()&lt;/b&gt; method.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Calendar Multi-Month View Titles&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarMultiView_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="CalendarMultiView" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarMultiView_thumb.sflb" width="186" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The main as well as the single month title is culture dependent as well. While the main title is easy customizable through the first and the last months, the tests locate the single month titles through the &lt;b&gt;DateTimeFormatInfo.AbbreviatedMonthNames[]&lt;/b&gt; array.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Calendar Fast Navigation Months&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the calendar title, one gets the &amp;#8220;Month/Year Navigation Popup&amp;#8221; provided for faster navigation to the month/year in interest.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarFastNavMonths_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="CalendarFastNavMonths" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarFastNavMonths_thumb.sflb" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The month abbreviations rounded in blue depend on the culture in use. The automated tests get those from the same &lt;b&gt;DateTimeFormatInfo.AbbreviatedMonthNames[]&lt;/b&gt; array. Note that the FastNavigation &amp;#8220;&lt;i&gt;Today&lt;/i&gt;&amp;#8221;, &amp;#8220;&lt;i&gt;OK&lt;/i&gt;&amp;#8221; and &amp;#8220;&lt;i&gt;Cancel&lt;/i&gt;&amp;#8221; buttons in this popup can be localized through the &lt;i&gt;FastNavigationSettings&lt;/i&gt; RadCalendar properties as in the demo below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.telerik.com/aspnet/prometheus/Calendar/Examples/Functionality/Globalization/DefaultCS.aspx"&gt;http://demos.telerik.com/aspnet/prometheus/Calendar/Examples/Functionality/Globalization/DefaultCS.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Calendar Week Days (header selectors) &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarWeekDaysName_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="CalendarWeekDaysName" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarWeekDaysName_thumb.sflb" width="223" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Those links select all the respective days in RadCalendar when clicked or just highlight the days on hover (the whole week can be highlighted/selected by the week number on left &amp;#8211; see the next point). The automated tests access the elements by their title: the day names are available through &lt;b&gt;DateTimeFormatInfo.DayNames[]&lt;/b&gt; array.&lt;/p&gt;  &lt;p&gt;By the way, here are the rendered headers in that table (shot from Firebug):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-FirebugDayHeader_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="79" alt="FirebugDayHeader" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-FirebugDayHeader_thumb.sflb" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Why don&amp;#8217;t we use the ID of that &amp;lt;th&amp;gt; element instead? The reason is quite on topic -- the order (so the IDs) depends on the culture. In other words the &lt;i&gt;Top_cs_5&lt;/i&gt; element represents &amp;#8220;Tuesday&amp;#8221; in English but &amp;#8220;Friday&amp;#8221; in Bulgarian for example.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Locating the week dates&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Talking about the week selectors on the other hand, here is a typical scenario the tests should cover:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click on week number (guess what &amp;#8211; it depends on the culture) &lt;/li&gt;    &lt;li&gt;Verify all the days of that week are selected &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarWeekSelectors_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="CalendarWeekSelectors" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarWeekSelectors_thumb.sflb" width="218" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is quite interesting in terms of culture-independent test. The test click on the row element, accessed by the ID:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-FirebugRowElement_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="59" alt="FirebugRowElement" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-FirebugRowElement_thumb.sflb" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then we need all the dates in the selected week. The method used for this purpose (see &lt;i&gt;getWeekDates()&lt;/i&gt; from the attached C# class for details) locates the first day of the week through the CultureInfo &lt;b&gt;DateTimeFormatInfo.FirstDayOfWeek&lt;/b&gt;, then lists the day names available in &lt;b&gt;DateTimeFormatInfo.DayNames[]&lt;/b&gt;&lt;b&gt; &lt;/b&gt;and&lt;b&gt; &lt;/b&gt;calculates the indices difference with the given date to get the first date from the week in question. Taking all the dates from the week is now a trivial task.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span style="text-decoration: underline"&gt;Days Cell Title&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;To be able to click on a certain date in the calendar (simulating user selecting that date), the tests need to locate the day cell. As the order of the Calendar cells depends on the culture (again) and for the sake of readability, the automated tests don&amp;#8217;t access the date cells by cell index, but through the localized cell title instead.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarDayToolTip_2.sflb"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="150" alt="CalendarDayToolTip" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-CalendarDayToolTip_thumb.sflb" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The default calendar cell title format is defined as &lt;i&gt;&amp;quot;dddd, MMMM dd, yyyy&amp;quot;&lt;/i&gt; in RadCalendar but is changeable by &lt;a href="http://www.telerik.com/help/aspnet-ajax/telerik.web.ui-telerik.web.ui.radcalendar-daycelltooltipformat.html"&gt;DayCellToolTipFormat&lt;/a&gt; property. So the exact day cell title can be accessed through the &lt;b&gt;DateTime.ToString(&amp;lt;format&amp;gt;, CultureInfo)&lt;/b&gt; method.&lt;/p&gt;  &lt;p&gt;I would also recommend the RadCalendar documentation resources for localization as additional readings:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/help/aspnet-ajax/calendar_localizationcultureinfo.html"&gt;Specifying a culture in RadCalendar controls&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/help/aspnet-ajax/calendar_localizationdateformatpattern.html"&gt;Calendar localization &amp;#8211; date format patterns&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/help/aspnet-ajax/calendar_localizationstrings.html"&gt;Localizing strings in RadCalendar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Happy localizing!&lt;/p&gt;  &lt;p&gt;-Konstantin&lt;/p&gt;  &lt;p&gt;&lt;a href="/photos/storage/kpetkov/RadCalendarCultureIndependentTest.zip"&gt;RadCalendarCultureIndependentTest.zip&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-28/RadCalendar_for_ASP_NET_AJAX_localization_and_all_the_necessary_to_have_culture_independent_automated_tests.aspx</link>
      <author>kpetkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-28/RadCalendar_for_ASP_NET_AJAX_localization_and_all_the_necessary_to_have_culture_independent_automated_tests.aspx</comments>
      <guid isPermaLink="false">a42f67c2-322b-4fae-8103-75c728f08f1f</guid>
      <pubDate>Thu, 28 Aug 2008 09:07:20 GMT</pubDate>
    </item>
    <item>
      <title>The Trickiest Tips in RadControls for ASP.NET (AJAX) Tests Automation</title>
      <description>&lt;p&gt;Do you wonder if there are any keys to get easy test automation over the RadControls components?&lt;/p&gt;
&lt;p&gt;I've seen people asking about how to get a simple (at a first glance) task done through this or that test automation tool and we generally find the specific resolution with the exact tool in use. However, in most cases the things are quite similar no matter which tool you prefer. Instead of posting particular solutions though, with this post I'm sharing some of the trickiest moments one may came across while working on tests automation of RadControls for ASP.NET (AJAX) and the general solution. That is to say the questions/answers below are component-related and are not something concerning the specific test automation tool.&lt;/p&gt;
&lt;p&gt;I won't surprise anyone here pointing that the ASP.NET (AJAX) suite of Telerik controls provides rich client-side functionality. The controls expose JavaScript functions/properties/events that are giving huge amount of options for the final implementation. At the same time, you should not care what's behind the scene at all. Each component's documentation of course describes its API in details. &lt;/p&gt;
&lt;p&gt;Ah, did I say something about a key in RadControls ASP.NET (AJAX) tests automation? Here it is - &lt;b&gt;the client-side API&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;So, which are the top trickiest moments in those controls test automation I'd like to share? Let me start with a common task regarding the rich text editor - setting custom content. You know, the RadEditor is one of those giant components, which does so much behind the scenes on the client, because of its rich client-side functionality.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;b&gt;RadEditor&lt;/b&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;i&gt;Hello, Telerik! We're using &lt;/i&gt;&lt;i&gt;the tool X  to test our ASP.NET&lt;/i&gt;&lt;i&gt; (AJAX) application.&lt;/i&gt;&lt;i&gt; Whenever we encounter a page with the &lt;/i&gt;&lt;i&gt;RadEditor on, &lt;/i&gt;&lt;i&gt;X cannot enter text in the editor.   &lt;/i&gt;&lt;i&gt;X recognizes the frame where the editor is placed, but it cannot push text to the editor.&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;I remember I've been looking into a nice test automation tool with a colleague of mine. He didn't like it that much saying: "Look at this, even its recorder cannot work with the Editor!" &lt;/p&gt;
&lt;p&gt;Nice try! What I answered was there is no tool which would automatically work with &lt;a href="http://www.telerik.com/DEMOS/ASPNET/Prometheus/Editor/Examples/Overview/DefaultCS.aspx" target="_blank"&gt;the editor&lt;/a&gt;. No, that's not correct, &lt;b&gt;there is no tool, which would &lt;i&gt;automagically&lt;/i&gt; work with &lt;i&gt;any&lt;/i&gt; rich-text editor&lt;/b&gt;. So I don't know about X, but RadEditor supports . all the &lt;i&gt;good&lt;/i&gt; tools out there. ;)&lt;/p&gt;
&lt;p&gt;What can you do to change the rich text editor content through an automated test? Take a look at its client-side API and the method &lt;i&gt;&lt;a href="http://www.telerik.com/help/aspnet-ajax/editor_set_html.html"&gt;set_html(&lt;/a&gt;) &lt;/i&gt;(&lt;i&gt;&lt;a href="http://www.telerik.com/help/aspnet/editor/sethtml.html"&gt;SetHtml()&lt;/a&gt;&lt;/i&gt; for the ASP.NET version). As long as your tool provides the ability to execute some custom JavaScript, you just need to access the client-side object and call the function with your content as argument and voila, you get the editor HTML updated. You can also get the editor HTML by &lt;i&gt;get_html()/GetHtml()&lt;/i&gt; methods.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;b&gt;RadInput&lt;/b&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Hey, Telerik! When I try to set a value in a Rad&lt;/i&gt;&lt;i&gt;Input control with &lt;/i&gt;&lt;i&gt;the tool Y, the value I set is immediately cleared out on exiting the field. I have tried numerous ways of setting this value, all with the same effect.&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Yes, the &lt;a href="http://www.telerik.com/DEMOS/ASPNET/Prometheus/Input/Examples/Common/OrderForm/DefaultCS.aspx" target="_blank"&gt;RadInput controls&lt;/a&gt; perform some JS validation on the client so although those are not so complex components as the RadEditor, you can't just find the input element and set/replace its value. Instead, (guess what?) use the &lt;a href="http://www.telerik.com/help/aspnet-ajax/input_clientsidebasics.html"&gt;Client-Side API&lt;/a&gt; and the &lt;i&gt;set_value()&lt;/i&gt; function in particular (&lt;i&gt;SetValue()&lt;/i&gt; in ASP.NET version). Again, you can verify the RadInput value by &lt;i&gt;get_value()/GetValue()&lt;/i&gt; methods.&lt;/p&gt;
&lt;p&gt;Okay, here comes the funny part:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;b&gt;RadComboBox&lt;/b&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Good day! How do you select an item of the ComboBox manually through an automated test written with the Z tool? I've written such a test, which clicks on the combobox arrow, the items are displayed, then the test clicks on the item I choose, but it does not get selected! I do it myself over the demo and it is selected as expected! What is going on here?!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;As &lt;a href="http://blog.falafel.com/2007/08/03/SelectingAnItemFromATelerikASPNETRadComboboxUsingSelenium.aspx"&gt;some fellows noticed&lt;/a&gt;, the trick is &lt;b&gt;first&lt;/b&gt; to &lt;b&gt;highlight&lt;/b&gt; the item and then click it. Otherwise the click action over the item does nothing. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-ComboBoxHighlightItem_2.sflb"&gt;&lt;img width="244" height="155" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" alt="ComboBoxHighlightItem" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-ComboBoxHighlightItem_thumb.sflb" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;That's not specific to Selenium of course as you can see in the &lt;a href="http://watin.sourceforge.net/"&gt;WatiN&lt;/a&gt; solution &lt;a href="http://blogs.telerik.com/ElenaTosheva/Posts/08-05-29/How_to_select_RadComboBox_item_with_WatiN.aspx"&gt;shared by my colleague Elena&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let's stop here for now and see what trick you've stumbled upon while doing some tests automation over your RadControls applications. Did you get an issue and want to share the solution you've found?&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;Konstantin&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-21/The_Trickiest_Tips_in_RadControls_for_ASP_NET_AJAX_Tests_Automation.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-21/The_Trickiest_Tips_in_RadControls_for_ASP_NET_AJAX_Tests_Automation.aspx</comments>
      <guid isPermaLink="false">ac50efb8-8a61-4192-a054-5b96942eb58f</guid>
      <pubDate>Thu, 21 Aug 2008 07:45:06 GMT</pubDate>
    </item>
    <item>
      <title>I'm back again, what comes next?</title>
      <description>&lt;p&gt;Yeah, I know, it's been quite some time since my last post. The ideas keep coming though and I've just realized there is no better time for a QA to blog than ... the summer. Do you know why? Well, just because of the summer time! You know, devs are humans too and they also need to rest a bit. ;) I can at least stop bugging around for a while and post some nice, interesting content.&lt;/p&gt;
&lt;p&gt;I'm afraid the list of ideas for my future posts is already quite long. However, since I'd like to share the most fascinating with you, the readers, I'd definitely like to hear what you are mostly interested in concerning the QA department here, at Telerik. &lt;/p&gt;
&lt;p&gt;Do you want to know about the major bugs we pushed together with the Q2 2008 release, which we announced two weeks ago? Sorry, I have to "disappoint" you -- there are no major bugs out there. ;) Seriously, it's great the customers never hear about most of the bugs we, the QAs know about.&lt;/p&gt;
&lt;p&gt;Do you want to know more about the test automation of RadControls? I'll soon prepare some more topics on the test automation, particularly about the RadControls for ASP.NET AJAX. I'd also like to hear your opinion about some ideas concerning the test automation our customers can do. Do you want to cover your complex RadControls application with automated tests so that you can easily verify everything's working fine on next update? I can prepare a separate post on the subject discussing some ideas in details that might be quite interesting for some of you, I suppose.&lt;/p&gt;
&lt;p&gt;I'd also like shortly to post a topic, which would surely come unexpected from a QA blog. It's something I can't find being discussed anywhere on the web, although I'm constantly trying to get information on the matter from the QA blogs. So get ready for a topic discussing the different kind of responsibilities the QA job can offer.&lt;/p&gt;
&lt;p&gt;Hope you'll enjoy the upcoming discussions but please feel free to raise questions you'd like to get answered.&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;Konstantin&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-07/I_m_back_again_what_comes_next.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-08-07/I_m_back_again_what_comes_next.aspx</comments>
      <guid isPermaLink="false">a2e9aa83-8bea-429f-b41d-0c26d172fced</guid>
      <pubDate>Thu, 07 Aug 2008 02:28:47 GMT</pubDate>
    </item>
    <item>
      <title>Web components styling tests automation, cross-browser solution</title>
      <description>&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span lang="BG"&gt;It's been quite some time since &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/07-11-04/How_precise_automated_tests_catch_totally_unexpected_bugs.aspx?ReturnURL=%2fKonstantinPetkov%2fPosts.aspx" target="_blank"&gt;my last post concerning the RadControls automation tests&lt;/a&gt; developed with &lt;a href="http://selenium.openqa.org/" target="_blank"&gt;Selenium&lt;/a&gt;. We still have a lot to share about our &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/07-07-09/Selenium_Scripts_for_RadControls_Firebug_and_XPath_Support.aspx?ReturnURL=%2fKonstantinPetkov%2fPosts.aspx" target="_blank"&gt;Selenium adventure&lt;/a&gt;, which could help those, interested in similar solutions.&lt;/span&gt;&lt;span lang="BG"&gt;&lt;br /&gt;
&lt;br /&gt;
First of all, I believe you are unable to completely verify the visual appearance of your Web application via automated tests. There is no way you can skip the manual check if the app "looks" good and has no visual glitches anywhere. Still, the client-side styling tests automation can be considered to be the first step for the necessary web page appearance verification.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span lang="BG"&gt;I would separate the main approaches I follow into two: through the rendered HTML and via JavaScript.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span lang="BG"&gt;Exploring the page output through &lt;a href="http://selenium.openqa.org/reference.html#locators" target="_blank"&gt;element locators&lt;/a&gt; is a fundamental task in Selenium. For a styling test one can locate the particular element and perform a check for its &lt;em&gt;style&lt;/em&gt; attribute.&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span lang="BG"&gt;&lt;br /&gt;
Let's take this demo for example:&lt;/span&gt;&lt;span lang="BG"&gt;&lt;a href="http://www.telerik.com/demos/aspnet/Calendar/Examples/DateTimePicker/Templates/DefaultCS.aspx"&gt;&lt;br /&gt;
http://www.telerik.com/demos/aspnet/Calendar/Examples/DateTimePicker/Templates/DefaultCS.aspx&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span lang="BG"&gt;&lt;br /&gt;
I like it because of the &lt;i style="mso-bidi-font-style: normal"&gt;RadTimePicker&lt;/i&gt; template buttons. Each button is colored either in red or blue depending on whether it is declared within the &lt;i style="mso-bidi-font-style: normal"&gt;Time&lt;/i&gt; or &lt;i style="mso-bidi-font-style: normal"&gt;AlternatingTime&lt;/i&gt; template. So let's open the Firebug and inspect a button element:&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;strong&gt;&lt;img alt="button colored in red" src="http://blogs.telerik.com/Photos/Storage/kpetkov/ButtonColoredInRed.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;I would go for a CSS selector to locate the element and simply check its attribute through &lt;i style="mso-bidi-font-style: normal"&gt;assertAttribute&lt;/i&gt;  &lt;a href="http://selenium.openqa.org/reference.html#storeAttribute" target="_blank"&gt;command&lt;/a&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;tr&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;assertAttribute&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;css=#RadTimePicker1_timeView button:contains('9:00')@style&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;width: 80px; color: Red;&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;/tr&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;Perfect! I run the test in Firefox (my default browser) and it verifies the button's style. Then run it in IE and ... it fails. It simply returns an 'object' in IE:&lt;br /&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="BG" style="font-size: 9pt; font-family: 'verdana','sans-serif'"&gt;&lt;br /&gt;
&lt;br /&gt;
Actual value '[object]' did not match 'width: 80px; color: Red;'&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; font-family: 'verdana','sans-serif'; mso-ansi-language: en-us"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;br /&gt;
Now let's see the second approach. The key is the &lt;em&gt;cssText&lt;/em&gt; attribute of the DOM element's '&lt;i style="mso-bidi-font-style: normal"&gt;style&lt;/i&gt;'. The following script test does the trick in Firefox for the 'red' button from the above example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;tr&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;assertExpression&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;javascript{this.page().findElement("css=#RadTimePicker1_timeView button:contains('9:00')").style.cssText}&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;&amp;lt;td&amp;gt;width: 80px; color: Red;&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;/tr&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;That's good, but in IE it fails again:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span lang="BG" style="font-size: 9pt; font-family: 'verdana','sans-serif'"&gt;Actual value 'WIDTH: 80px; COLOR: red' did not match 'width: 80px; color: Red;'&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="font-size: 9pt; font-family: 'verdana','sans-serif'; mso-ansi-language: en-us"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;You notice the upper case as well as the missing semicolon at the end. To work around that, one can call &lt;i style="mso-bidi-font-style: normal"&gt;toLowerCase&lt;/i&gt; method reaching the following cross-browser solution:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;tr&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;assertExpression&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;javascript{this.page().findElement("css=#RadTimePicker1_timeView button:contains('9:00')").style.cssText.toLowerCase()}&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&amp;lt;td&amp;gt;width: 80px; color: red*&amp;lt;/td&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="mso-ansi-language: en-us"&gt;&amp;lt;/tr&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;That's it! Looks a bit tricky at a first glance but does a perfect job. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;Numerous RadControls tests use the above solution. Hope you like it too!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="mso-ansi-language: en-us"&gt;-Konstantin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-04-07/Web_components_styling_tests_automation_cross-browser_solution.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-04-07/Web_components_styling_tests_automation_cross-browser_solution.aspx</comments>
      <guid isPermaLink="false">fa8c3a02-14e8-43de-a0cc-4185d3b49853</guid>
      <pubDate>Mon, 07 Apr 2008 02:00:00 GMT</pubDate>
    </item>
    <item>
      <title>[Incoming] South East European Software Testing Conference</title>
      <description>&lt;p&gt;&lt;span&gt;    As a seven-year hard fighting Software Quality Assurance, I was surprised but glad to find out that the upcoming Testing Conference - &lt;a href="http://seetest.org/" target="_blank"&gt;SEETEST 2008&lt;/a&gt; will be held just a couple of miles away from the &lt;a href="http://blogs.telerik.com/VassilTerziev/Posts/07-11-25/5_years_of_Telerik_new_office.aspx?ReturnURL=%2fVassilTerziev%2fPosts.aspx" target="_blank"&gt;Telerik Head Office&lt;/a&gt; in Sofia, Bulgaria on July 2&lt;sup&gt;nd&lt;/sup&gt; and 3&lt;sup&gt;rd&lt;/sup&gt;. It &lt;/span&gt;will be the first conference ever in South East Europe &lt;span&gt;aiming to &lt;a href="http://seetb.org/?page=9&amp;amp;news=3" target="_blank"&gt;cover various topics&lt;/a&gt; &lt;/span&gt;in the area of Software Testing and Software Quality Management&lt;span&gt;. What impresses me is the &lt;a href="http://seetb.org/?page=9&amp;amp;news=4" target="_blank"&gt;top experts&lt;/a&gt; in the area coming from all over the world - USA, South and West Europe, Israel and India. Okay, the ad should stop here. ;-)&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;    I have to admit I was a bit suspicious about the organization of such a big conference in the area of Software Testing right here in Sofia, but so far everything looks good! My preferences for the sessions are not important - there are a dozen of speakers having over 10-15 years of experience in organizing QA processes and teams. I was just wondering if someone there could best answer my question about how the &lt;a href="http://www.telerik.com/products/aspnet-prometheus/controls/grid/overview.aspx" target="_blank"&gt;RadGrid&lt;/a&gt; &lt;a href="http://blogs.telerik.com/KonstantinPetkov/Posts/07-07-09/Selenium_Scripts_for_RadControls_Firebug_and_XPath_Support.aspx?ReturnURL=%2fKonstantinPetkov%2fPosts.aspx" target="_blank"&gt;automated tests&lt;/a&gt; should be organized so that we can mostly cover most of the thousand scenarios in its functionality and at the same time we do not have to maintain the test suites all day long. Seriously, what I wonder is whether a specific problem resolutions in software testing can be discussed at a testing conference, without making the session quite boring for the most of the audience. Of course, the general topics are mandatory for each conference; no matter if it is just &lt;i&gt;the_big_one_this_season&lt;/i&gt; or it is organized over a new technology or a specific area like the Software Testing. Is it possible at all? Otherwise listening to the masters sharing their experience can always bring some good new ideas.&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;    Oh, I know a nice restaurant at the top floor (18&lt;sup&gt;th&lt;/sup&gt; as far as I remember) of the hotel holding the conference, which offers good food and great sight over the city. So as you might have already guessed, we have gathered a strong QA Telerik team to attack the event. ;-) I hope to see some fellows there..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; Konstantin&lt;br /&gt;
[A suspicious QA]&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-03-12/_Incoming_South_East_European_Software_Testing_Conference.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-03-12/_Incoming_South_East_European_Software_Testing_Conference.aspx</comments>
      <guid isPermaLink="false">3dfde288-19fa-4938-9685-a8d0105fda59</guid>
      <pubDate>Wed, 12 Mar 2008 06:30:48 GMT</pubDate>
    </item>
    <item>
      <title>Bug-tracker conversion tool: Gemini -&gt; TFS</title>
      <description>&lt;p&gt;Our migration to Team Foundation Server started a couple of months ago with &lt;a href="http://blogs.telerik.com/TsvetomirTsonev/Posts/07-11-04/Team_Foundation_Server_and_the_missing_file_sharing_Part_1.aspx?ReturnURL=%2fTsvetomirTsonev%2fPosts.aspx" target="_blank"&gt;the Source Control adoption&lt;/a&gt;. Another step that we performed was to transfer our &lt;a href="http://www.countersoft.com/Default.aspx?PageID=21" target="_blank"&gt;Countersoft's Gemini&lt;/a&gt; bug-tracker projects to TFS Issue Tracking System.&lt;br /&gt;
&lt;br /&gt;
I've been searching around for a tool that would perform the job automagically ;-) and &lt;span style="color: #000000"&gt;found nothing but other inquiries on the subject without answers.&lt;/span&gt; So, I'm posting the code, which helped us migrate our projects. Hopefully someone else can benefit from it too and I can save some of your time up.&lt;br /&gt;
  &lt;br /&gt;
Well, there is no rocket science here, but the code, I believe, is easy to reuse. Several SQL queries get all the issue information (subject, history, comments, attachments and links) from your Gemini database. Then we create the work items for the respective type, title, description, area, priority (if applicable), state, assignee, attachments and links. We've put custom mapping everywhere so that one can add his/her own lists of Gemini issue types, categories, assignees, states, etc. since Gemini allows easy customization of each project. The issue comments are added into work item's history in the appropriate format.&lt;br /&gt;
&lt;br /&gt;
Some details coming to my mind:&lt;/p&gt;
&lt;ol type="1"&gt;
    &lt;li&gt;The current query skips the closed Gemini issues &lt;/li&gt;
    &lt;li&gt;The code disallows work item duplication. Say you start the tool, but it fails somewhere throwing an exception. When you address the issue, restart the tool and it will skip the project work items that have already been created (comparing the item title). &lt;/li&gt;
    &lt;li&gt;The regular expressions helped us a lot in description formatting (although I should say it's still not perfect), but they may not be necessary at all. Our Gemini distribution includes RadEditor, which adds issue description as HTML. Thus we use the expressions to format descriptions via adding new lines, converting HTML tags, etc. &lt;/li&gt;
    &lt;li&gt;Attachments are loaded from the database and saved in the file system. TFS WorkItem Attachment requires a path to the file to be added. &lt;/li&gt;
    &lt;li&gt;Links (RelatedLink types) are added if the linked item has already been  created in TFS. Otherwise, we add a note in the item description, which could help when the item is reviewed. &lt;/li&gt;
    &lt;li&gt;Some other details are mentioned at the top of each description -- the issue ID in Gemini for reference and the name of the reporter Hm, perhaps one would like to see the submission date as well? &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So how would one use that?&lt;/p&gt;
&lt;ol type="1"&gt;
    &lt;li&gt;This is a simple Visual Studio 2005 project so extract the zip and load it &lt;/li&gt;
    &lt;li&gt;Add your Gemini SQL database and modify the SQL connection string &lt;/li&gt;
    &lt;li&gt;Adapt it to your Gemini projects: &lt;/li&gt;
&lt;/ol&gt;
&lt;ul type="disc"&gt;
    &lt;li&gt;  configure the Gemini and TFS project name, area &lt;/li&gt;
    &lt;li&gt;  add your mappings of:
    &lt;ul type="circle"&gt;
        &lt;li&gt;      item types &lt;/li&gt;
        &lt;li&gt;      project areas &lt;/li&gt;
        &lt;li&gt;      list of assignees &lt;/li&gt;
        &lt;li&gt;      issue / item states &lt;/li&gt;
        &lt;li&gt;      priorities &lt;/li&gt;
        &lt;li&gt;      "activated by" field if necessary &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;      &lt;br /&gt;
I've added comments here and there. Hope those help!&lt;br /&gt;
&lt;br /&gt;
The code is available &lt;a href="http://blogs.telerik.com/Files/Gemini2TFSConverter.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I would like to thank Mr. Hrissimir Neikov (Telerik Reporting team) who got the idea, wrote the base part and helped improving the tool. As to me, well, this was just a great learning experience!&lt;br /&gt;
&lt;br /&gt;
Yours truly,&lt;br /&gt;
Konstantin&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/08-02-05/Bug-tracker_conversion_tool_Gemini_-_TFS.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/08-02-05/Bug-tracker_conversion_tool_Gemini_-_TFS.aspx</comments>
      <guid isPermaLink="false">791dc955-1ed7-46f7-a220-18193b72b1de</guid>
      <pubDate>Tue, 05 Feb 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>How precise automated tests catch totally unexpected bugs</title>
      <description>You may remember &lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/17/2765.aspx"&gt;my post&lt;/a&gt;&lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/17/2765.aspx"&gt;&lt;/a&gt; where I mentioned the technique I like regarding writing precise &lt;a href="http://www.openqa.org/selenium/"&gt;Selenium&lt;/a&gt;&lt;a href="http://www.openqa.org/selenium/"&gt;&lt;/a&gt; tests.&lt;br /&gt;
&lt;br /&gt;
I believe the good test has double value if it doesn't verify just the case it is written for, but even catches totally unexpected bugs. How does such test look like?&lt;br /&gt;
&lt;br /&gt;
Several days ago our &lt;a href="http://www.telerik.com/radgrid"&gt;Web Grid&lt;/a&gt;&lt;a href="http://www.telerik.com/radgrid"&gt;&lt;/a&gt; developers were working on resolving a weird bug in the control. As soon as the new build was ready, I started Selenium tests execution to verify that everything with the build is OK. Some of the tests failed, though, throwing an error that a specified element cannot be found. This appears in several tests that check about element existence in Edit mode of the Grid. Click on ? pencil on the right in the following demo to get an example:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.telerik.com/demos/aspnet/Grid/Examples/Programming/AccessingCellsAndRows/DefaultCS.aspx"&gt;http://www.telerik.com/demos/aspnet/Grid/Examples/Programming/AccessingCellsAndRows/DefaultCS.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Imagine a test that for instance checks about the drop down (GridDropDownColum actually) in the edit form or any other element there:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="/photos/storage/kpetkov/SelectElementInGridEditTable.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
The test above verifies that the specific element is present in the 2-nd cell of the 1-st row in the edit form table. The same element could be verified by the simpler XPath expression below:&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;//table[@id='RadGrid1_ctl01_ctl05_mainTable']//select&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You can use Selenium IDE over the demo to verify that (as I explained &lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/10/2669.aspx"&gt;here&lt;/a&gt;&lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/10/2669.aspx"&gt;&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
So why should I make this check so precise?&lt;br /&gt;
&lt;br /&gt;
The failed tests threw an error because of another element rendered unexpectedly - the check box from GridTemplateColumn (first column in the above grid example). Since the CheckBox is part of the ItemTemplate only (and not EditItemTemplate - see the source from the ASPX tab below the Grid) it should not appear when the Grid is in edit mode. Of course, there was no check like "verify that a CheckBox does not appear as first element in the edit form", but the precise check in this test (1st row / 2nd cell) actually verifies the exact table structure catching any rendering issues. The test fails since the actual place of the drop down has been changed.  Of course no one will find this bug in production - it was addressed immediately as well.&lt;br /&gt;
&lt;br /&gt;
This is just a simple example on the matter, but you can't imagine all the situations where such precise tests value. So the better our automated tests are the better quality our products offer!&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Konstantin&lt;br /&gt;
&lt;br /&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/07-11-04/How_precise_automated_tests_catch_totally_unexpected_bugs.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/07-11-04/How_precise_automated_tests_catch_totally_unexpected_bugs.aspx</comments>
      <guid isPermaLink="false">89282f1f-54db-4068-acec-e415cd110325</guid>
      <pubDate>Sun, 04 Nov 2007 11:21:00 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET Web Control Performance Test in Selenium</title>
      <description>Since Selenium has been designed as a browser-oriented tool, load/performance tests definitely aren't among its strong points. With the help of &lt;a href="http://www.openqa.org/selenium-rc/"&gt;Selenium Remote Control&lt;/a&gt;&lt;a href="http://www.openqa.org/selenium-rc/"&gt;&lt;/a&gt;  one can make precise performance test in his/her preferred language (executing number of opening page steps for example and calculating the average time), but I will limit this post in a really simple example test based entirely on Selenium Core.&lt;br /&gt;
&lt;br /&gt;
I've used &lt;a href="http://www.telerik.com/demos/aspnet/Grid/Examples/Overview/DefaultCS.aspx"&gt;RadGrid&lt;/a&gt;&lt;a href="http://www.telerik.com/demos/aspnet/Grid/Examples/Overview/DefaultCS.aspx"&gt;&lt;/a&gt; as a complex Web Control to check whether its execution time exceeds over an accepted period. What the Selenium Core test needs is just a result available for verification. So adding the execution time as text on the page will best simplify our Selenium test.&lt;br /&gt;
&lt;br /&gt;
In order to fix the control execution precisely, my test class inherits from RadGrid, overriding its Init and Render events. &lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="/photos/storage/kpetkov/code.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
I check the starting time prior to control initialization (Base.OnInit) and calculate the time as soon as our grid is rendered (Base.Render). I extend the rendering adding the calculated time into a span element below the Grid. The result looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="/photos/storage/kpetkov/GridExecutionTime.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
Now our Selenium test looks much straight-forward. All I do is to perform a simple text check (using assertTextPresent for example) to verify that the rendered text contains "00:00:00", which will assure that the execution time has not passed over a second. &lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="/photos/storage/kpetkov/test.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
As simple as possible, isn't it?&lt;br /&gt;
&lt;br /&gt;
Of course, one can modify the test by rendering the required text in format per his/her requirements or limit the allowed control execution more strictly.&lt;br /&gt;
&lt;br /&gt;
I have attached a sample web site including the inherited class (in App_Code) and a web page with the test grid demo.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blogs.telerik.com/files/RadGridExecutionTimeWebSite.zip"&gt;RadGridExecutionTimeWebSite.zip&lt;/a&gt; 
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/07-08-20/ASP_NET_Web_Control_Performance_Test_in_Selenium.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/07-08-20/ASP_NET_Web_Control_Performance_Test_in_Selenium.aspx</comments>
      <guid isPermaLink="false">38c6bffd-9280-4438-89a9-4844f1d46b63</guid>
      <pubDate>Mon, 20 Aug 2007 19:53:00 GMT</pubDate>
    </item>
    <item>
      <title>Pressing keys simulation in Selenium, RadInput on fire</title>
      <description>Have you thought whether it's easy to automate tests, simulating key pressing?  How is this handled in a browser-oriented tool like Selenium?&lt;br /&gt;
&lt;br /&gt;
Fortunately Selenium provides API for keyDown/Up and keyPress as well as a command to fire any event, which triggers correspondingly "on"-handler (of course - "fireEvent"). On the other hand the "type" command just sets the value of an input field, so that one can set new value of the input element without the need to fire any event. What if we need to see how a control behaves in case of some specific user input, though? An input control may accept digits only (like &lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/RadNumericTextBox/FirstLook/DefaultCS.aspx"&gt;RadNumericTextBox&lt;/a&gt;&lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/RadNumericTextBox/FirstLook/DefaultCS.aspx"&gt;&lt;/a&gt;) or even accepts certain keys pressing (see the &lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/RadMaskedTextBox/ShowHint/DefaultCS.aspx"&gt;MaskedTextBox&lt;/a&gt;&lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/RadMaskedTextBox/ShowHint/DefaultCS.aspx"&gt;&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
The keyPress command should simulate a user pressing and releasing a key, so this is our choice. I put an input text element in the form to test key pressing on it (you can find all the examples/tests I use in this post attached in the zip):&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt; &lt;span&gt;name&lt;/span&gt;&lt;span&gt;="theTextbox"&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;&lt;span&gt;="theTextbox"&lt;/span&gt; &lt;span&gt;type&lt;/span&gt;&lt;span&gt;="text"&lt;/span&gt; &lt;span&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
and add a simple test of keyPress. The command needs the &lt;a href="http://www.asciitable.com/"&gt;ASCII code&lt;/a&gt;&lt;a href="http://www.asciitable.com/"&gt;&lt;/a&gt; of the character, so the test looks like this:&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;keyPress&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;theTextbox&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;\97&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
I run the test in Firefox (my default browser) and it leaves the input with 'a' as value. Then I check the same in IE, but there is no visible effect!&lt;br /&gt;
&lt;br /&gt;
I stumbled upon this issue some time ago and I really did not understand that until Dan Fabulich, Selenium lead developer (I like his post &lt;a href="http://darkforge.blogspot.com/2006/12/why-is-html-selenese-so-simplistic.html"&gt;here&lt;/a&gt;&lt;a href="http://darkforge.blogspot.com/2006/12/why-is-html-selenese-so-simplistic.html"&gt;&lt;/a&gt;), explained to me that the "keyPress" simply fires keyPress event in JavaScript, but its up to the browser whether to type this letter into the input field. Firefox does type it, but in most other browsers keyPress causes value change only if a JS event handler is registered to handle the event. Simply, isn't it?&lt;br /&gt;
&lt;br /&gt;
So the input value should be explicitly set no matter if the event is fired. We can use keyPress/typeKeys (the latter replaces several keyPress calls) along with "type" to workaround that. &lt;br /&gt;
&lt;br /&gt;
The first test solution looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;keyPress&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;theTextbox&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;\97&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;         &lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;type&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;theTextbox&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;a&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;
               &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
Now lets take a form with ASP:TextBox and RadTextBox. The above works with the regular text box, but there is a trick regarding RadInput controls input elements: those render the actual input elements with "_text" suffix. So our test looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Test ASP:TextBox --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;keyPress&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;TextBox1&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;\97&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;type&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;TextBox1&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;a&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Test RadInput TextBox --&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;keyPress&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;\97&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;type&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;a&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;fireEvent&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;blur&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Type several characters into RadTextBox --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;typeKeys&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;voila&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;type&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;voila&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;fireEvent&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;RadTextBox1_text&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;blur&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;You have noticed the "fireEvent" call at the end - we need that to set the value of RadInput control by typing-letters-way. &lt;br /&gt;
&lt;br /&gt;
By the way, the easiest way to set values of RadInput controls is to call their SetValue() function via "getEval" command for example:&lt;br /&gt;
&lt;br /&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Set RadTextBox value via SetValue method --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;getEval&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;this.page().getCurrentWindow()["RadTextBox1"].SetValue("myTextBoxValue");&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
The testing of RadInput controls client validation behavior is now easy to automate!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="../../files/KPetkov_InputElementsKeyPressInSelenium.zip"&gt;KPetkov_InputElementsKeyPressInSelenium.zip&lt;/a&gt;&lt;br /&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/07-08-12/Pressing_keys_simulation_in_Selenium_RadInput_on_fire.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/07-08-12/Pressing_keys_simulation_in_Selenium_RadInput_on_fire.aspx</comments>
      <guid isPermaLink="false">5e202071-0713-4743-9ed2-64a926caaa35</guid>
      <pubDate>Sun, 12 Aug 2007 18:04:00 GMT</pubDate>
    </item>
    <item>
      <title>Selenium IE performance issues; Tests optimization</title>
      <description>&lt;p class="MsoNormal"&gt;&lt;span&gt;As started in my &lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/10/2669.aspx"&gt;previous post&lt;/a&gt; Selenium supports XPath expressions, which is actually one of the most commonly used DOM element &lt;span&gt;location&lt;/span&gt; strategies. &lt;/span&gt;&lt;span&gt;Unfortunately people complain about slower tests &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt; IE (&lt;/span&gt;&lt;span&gt;the problem is explained in details and discussed &lt;/span&gt;&lt;a href="http://forums.openqa.org/thread.jspa?threadID=6483&amp;amp;start=0&amp;amp;tstart=0"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://forums.openqa.org/thread.jspa?threadID=6483&amp;amp;start=0&amp;amp;tstart=0"&gt;&lt;span&gt;here&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; because of the&lt;/span&gt;&lt;span&gt; XPath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as well as &lt;span&gt;of&lt;/span&gt; some failing tests &lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;IE, created for example with &lt;a href="http://www.openqa.org/selenium-ide/"&gt;Selenium IDE&lt;/a&gt; in Firefox&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;These&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;are &lt;/span&gt;&lt;span&gt;due to the fact that Selenium includes external library in order to support XPath&lt;span&gt; &lt;span&gt;in &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;IE too &lt;/span&gt;&lt;span&gt;and &lt;/span&gt;&lt;span&gt;Firefox supports it internally.&lt;/span&gt;&lt;span&gt; So in other words, Selenium XPath support definitely differs &lt;span&gt;in&lt;/span&gt; IE and Firefox.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Almost two years ago, when I started working with Selenium here at Telerik, I was happy to see my first tests passing and simulating &lt;span&gt;successfully &lt;/span&gt;some user actions. I &lt;span&gt;had written hundreds of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;tests before I found the significant difference in the execution time in IE &lt;span&gt;compared to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;Firefox. Now I always do my best not simply to write a test covering specific scenario, but to make it as optimized as possible. Is this necessary?&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Look at the screen shots below. This is just a suite of RadGrid Selenium tests.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;[FF 2.0.0.4]&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;img alt="" src="/photos/storage/kpetkov/8MinutesInFirefox.gif" /&gt;&lt;br /&gt;
&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;[IE 7.0.6730.11]&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;img alt="" src="/photos/storage/kpetkov/15MinutesInIE.gif" /&gt;&lt;br /&gt;
&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;So those tests &lt;/span&gt;&lt;span&gt;pass for about 8 minutes in &lt;/span&gt;&lt;span&gt;Firefox, but require ~&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt; minutes in &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;IE. Well, I still can optimize &lt;/span&gt;&lt;span&gt;them &lt;/span&gt;&lt;span&gt;a bit.&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Now imagine customers &lt;span&gt;that are&lt;/span&gt; waiting for a stable build or even release. Imagine all the RadControls tests &lt;span&gt;available&lt;/span&gt;&lt;span&gt; &lt;/span&gt;being executed tens of times daily. We definitely need to have tests that run as fast as possible!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span&gt;What can we do to optimize the tests?&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Here is a list of some solutions I'm after:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;         1)&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Use the best &lt;/span&gt;&lt;/b&gt;&lt;a href="http://release.openqa.org/selenium-core/0.8.2/reference.html"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://release.openqa.org/selenium-core/0.8.2/reference.html"&gt;&lt;b&gt;&lt;span&gt;command&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; for the particular case! I'll take a command, verifying the text of the given element:&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Simple test scenario implementations:&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;span&gt;-&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Check the existence of an element, having specified ID and text&lt;br /&gt;
&lt;span&gt;-&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Check whether the element with given ID has the expected text&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Both do the same, but the second sounds better, doesn't it? Here's the source:&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;assertElementPresent&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span&gt; | //span[@id='mySpanId' and text()='mySpanText'] |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;assertText&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span&gt; | mySpanId | mySpanText&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Furthermore, as soon as you know the API and use the best command, creating such tests is much easier.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;Consider using store/verify/&lt;b&gt;assertValue&lt;/b&gt; as well. This one is an assertText alternative, but for the input elements.&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;2)&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Avoid using XPath when IDs are available!&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Ask your devs to add IDs to the elements you need to use! ;-) This is serious and I have a really fresh example.&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;During the past week, our &lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/Overview/DefaultCS.aspx"&gt;RadInput controls&lt;/a&gt; got new rendering! This will help us avoid some layout issues, etc. I asked our devs to add IDs to the input sub-elements like the Go and Spin buttons:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://www.telerik.com/demos/aspnet/Input/Examples/RadNumericTextBox/Formatting/DefaultCS.aspx"&gt;&lt;span&gt;http://www.telerik.com/demos/aspnet/Input/Examples/RadTextBox/Settings/DefaultCS.aspx&lt;br /&gt;
http://www.telerik.com/demos/aspnet/Input/Examples/RadNumericTextBox/Formatting/DefaultCS.aspx&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;So I no longer need to use complex expressions like:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;click | //span[@id='&lt;/span&gt; &lt;span&gt;RadTextBox1_wrapper']/span/a/img[@alt='Go'] |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;to simulate pressing those controls. Instead, the action looks much better now:&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;click | RadTextBox1_GoButton |&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;and is definitely faster!&lt;o:p&gt;&lt;br /&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;3)&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Use precise expression, to avoid continuous XPath engine iterations&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;As I mentioned in my previous post, the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1192"&gt;XPather Firefox Add-on&lt;/a&gt; will give you the full XPath to the required element really &lt;span&gt;easily&lt;/span&gt;. However, I &lt;span&gt;dislike&lt;/span&gt; using the full XPath as the tests become so ugly and maintaining them is&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt; nightmare! The technique I like is something in the middle.&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;A. Start from the top of the control, &lt;span&gt;whose&lt;/span&gt; element you'd like to locate (most RadControls for example include a div element as wrapper) and go through the tree of its elements to the required one. For instance, I like starting from our Web Grid's table element (see the screen shots/examples from my &lt;a href="http://blogs.telerik.com/blogs/konstantin_petkov/archive/2007/07/10/2669.aspx"&gt;previous post&lt;/a&gt;). This makes reading the test easier as well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;B. Use the parent element, which will make the expression a bit more specific. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Say there are a couple of input elements around the page, having different and unique parents. Creating an expression, which includes the parent like &lt;span&gt;//parentType[parentAttribute]/requiredChild&lt;/span&gt; will make the test faster for sure. Point A is actually a private case of this one. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Generally speaking, make your expression as precise as possible, but without breaking test's readability!&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Conclusion:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; We always talk about product quality, but I believe we should also pay attention to the quality of our automated tests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; Making the tests run faster and still keeping them easily readable will be worthwhile.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/KonstantinPetkov/Posts/07-07-16/Selenium_IE_performance_issues_Tests_optimization.aspx</link>
      <author>Konstantin Petkov</author>
      <comments>http://blogs.telerik.com/KonstantinPetkov/Posts/07-07-16/Selenium_IE_performance_issues_Tests_optimization.aspx</comments>
      <guid isPermaLink="false">efb04baf-9de6-4691-ba55-e22fb2dc07d0</guid>
      <pubDate>Mon, 16 Jul 2007 13:57:00 GMT</pubDate>
    </item>
  </channel>
</rss>