Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Selenium Test Cases not Recognizing Elements in scLocator

    Good afternoon Isomorphic and Community,

    After reading the user guide included about Selenium extensively, I have decided to use the Selenium RC for my Java scripts. I am currently running into an issue with the Selenium extensions that are provided with the version of smartgwt3.1d. (Versions of the SmartClient and Browser in question are stated at the bottom of this post.) The following is a list of steps I have done to create this issue.

    ***Pre-Conditions***

    1. Selenium IDE is installed and has user-extensions.js and user-extensions-ide.js files are loaded.

    2. TestNG is installed and being used to run unit tests in Java.

    3. Java classpath contains:
    Selenium v2.24.1 .jars (java client, server, java client srcs)
    TestNG v6.5.2 .jar

    4. The selenium .jars and the SmartGWT user-extensions.js are in the same directory.

    ***Steps***

    1. Test case is carried out through Selenium IDE.

    2. The commands waitForElementClickable, as well as scLocator syntax, etc. are displayed. This shows that Selenium is recognizing the user extensions.

    3. The test case is saved and exported to TestNG Java syntax and is loaded as a script into a sample TestNG class.

    4. Additional code is modified to set up the test case properly. See the whole TestNG class code below.

    Code:
    package test.cases;
    
    import com.thoughtworks.selenium.*;
    import org.testng.annotations.*;
    import java.util.regex.Pattern;
    import org.testng.Assert;
    
    public class Case1 extends SeleneseTestNgHelper {
    	
    	Selenium selenium;
    	HttpCommandProcessor proc;
    	
    	void waitForElementClickable(String locator)
    	{
    		String[] locatorArg = {locator};
    		proc.doCommand("waitForElementClickable", locatorArg);
    	}
    
    @BeforeSuite
    	public void setup() 
    	{
    		proc = new HttpCommandProcessor("localhost", 4444, "*firefox", "http://10.1.2.3:8080/");
    		selenium = new DefaultSelenium(proc);
    		selenium.start();
    	}
    	
    	@Test 
    	public void testCase1() throws Exception 
    	{
    		selenium.setSpeed("1000");
    		selenium.open("dev/");
    		selenium.windowFocus();
    		selenium.windowMaximize();
    
    	        waitForElementClickable("scLocator=//TreeGrid[ID=\"isc_TreeGrid_0\"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0]");              		
    		selenium.click("scLocator=//TreeGrid[ID=\"isc_TreeGrid_0\"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0]");
    
    @AfterClass
    	public void tearDown() 
    	{
    		selenium.stop();
    	}
    	
    }
    5. Run the Selenium standalone server using the command line arguments
    Code:
    -java -jar selenium-server-standalone-2.24.1.jar -userExtensions user-extensions.js > output.txt
    5. Run the testNG class.

    ***Problem***

    See the output log of the selenium server below.

    Code:
    13:16:40.129 INFO - Java: Oracle Corporation 22.1-b02
    13:16:40.131 INFO - OS: Windows 7 6.1 amd64
    13:16:40.138 INFO - v2.24.1, with Core v2.24.1. Built from revision 17205
    13:16:40.255 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
    13:16:40.256 INFO - Version Jetty/5.1.x
    13:16:40.257 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
    13:16:40.257 INFO - Started HttpContext[/selenium-server,/selenium-server]
    13:16:40.258 INFO - Started HttpContext[/,/]
    13:16:40.330 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@5fa0f02a
    13:16:40.331 INFO - Started HttpContext[/wd,/wd]
    13:16:40.336 INFO - Started SocketListener on 0.0.0.0:4444
    13:16:40.336 INFO - Started org.openqa.jetty.jetty.Server@f33ef6a
    13:17:05.512 INFO - Checking Resource aliases
    13:17:05.514 INFO - Checking Resource aliases
    13:17:05.518 INFO - Command request: getNewBrowserSession[*firefox, http://10.1.2.3:8080/, ] on session null
    13:17:05.520 INFO - creating new remote session
    13:17:05.571 INFO - Allocated session b0dc34722c52421e9741336dacd9d815 for http://10.1.2.3:8080/, launching...
    jar:file:/C:/eclipse/workspace/sample-project/war/WEB-INF/lib/selenium-server-standalone-2.24.1.jar!/customProfileDirCUSTFFCHROME
    13:17:05.731 INFO - Preparing Firefox profile...
    13:17:06.782 INFO - Launching Firefox...
    13:17:09.233 INFO - Got result: OK,b0dc34722c52421e9741336dacd9d815 on session b0dc34722c52421e9741336dacd9d815
    13:17:09.420 INFO - Command request: getNewBrowserSession[*iexplore, http://localhost:4444, ] on session null
    13:17:09.421 INFO - creating new remote session
    13:17:09.423 INFO - Allocated session 59d86013535642ac85eda891946706e3 for http://localhost:4444, launching...
    jar:file:/C:/eclipse/workspace/sample-project/war/WEB-INF/lib/selenium-server-standalone-2.24.1.jar!/core
    13:17:10.863 INFO - Launching Embedded Internet Explorer...
    13:17:11.369 INFO - Launching Internet Explorer HTA...
    13:17:14.753 INFO - Got result: OK,59d86013535642ac85eda891946706e3 on session 59d86013535642ac85eda891946706e3
    13:17:14.765 INFO - Command request: setContext[Case1.testCase1, ] on session 59d86013535642ac85eda891946706e3
    13:17:14.825 INFO - Got result: OK on session 59d86013535642ac85eda891946706e3
    13:17:14.851 INFO - Command request: setSpeed[1000, ] on session b0dc34722c52421e9741336dacd9d815
    13:17:14.851 INFO - Got result: OK on session b0dc34722c52421e9741336dacd9d815
    13:17:14.853 INFO - Command request: open[dev/, ] on session b0dc34722c52421e9741336dacd9d815
    13:17:21.587 INFO - Got result: OK on session b0dc34722c52421e9741336dacd9d815
    13:17:21.591 INFO - Command request: windowFocus[, ] on session b0dc34722c52421e9741336dacd9d815
    13:17:22.727 INFO - Got result: OK on session b0dc34722c52421e9741336dacd9d815
    13:17:22.730 INFO - Command request: windowMaximize[, ] on session b0dc34722c52421e9741336dacd9d815
    13:17:23.746 INFO - Got result: OK on session b0dc34722c52421e9741336dacd9d815
    13:17:23.751 INFO - Command request: waitForElementClickable[scLocator=//TreeGrid[ID="isc_TreeGrid_0"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0], ] on session b0dc34722c52421e9741336dacd9d815
    13:17:54.765 INFO - Got result: Timed out after 30000ms on session b0dc34722c52421e9741336dacd9d815
    13:17:54.807 INFO - Command request: captureScreenshot[C:\eclipse\workspace\sample-project\test-output\Default suite\TEST-testCase13541679687329543299.png, ] on session null
    13:17:54.831 INFO - Creating Robot
    13:17:56.758 INFO - Got result: OK on session null
    13:17:56.762 INFO - Command request: selectWindow[null, ] on session 59d86013535642ac85eda891946706e3
    13:17:56.820 INFO - Got result: OK on session 59d86013535642ac85eda891946706e3
    13:17:56.822 INFO - Command request: testComplete[, ] on session b0dc34722c52421e9741336dacd9d815
    13:17:56.823 INFO - Killing Firefox...
    13:17:57.006 INFO - Got result: OK on session b0dc34722c52421e9741336dacd9d815
    According to the output, it is timing out because that element never becomes clickable. After further investigation, this is what I have found out:

    ***Notes of interest***

    1. Without user extensions, the default locator syntax recognizes this xpath and can proceed. (According to the selenium docs, this is not a stable way to test.)

    2. After multiple Selenium IDE runs, the ID is always the same. I don't believe the issue is dynamically generated IDs.

    3. With the user extensions, when it loads and I do a refresh it will recognize the waitForElementClickable command and proceed, however it will not click on that element. Below is a sample of what I mean.



    Code:
    13:31:55.427 INFO - Command request: waitForElementClickable[scLocator=//TreeGrid[ID="isc_TreeGrid_0"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0], ] on session 872b9ff33ad1432eabd2853d6d882bb7
    13:32:01.855 INFO - Got result: OK on session 872b9ff33ad1432eabd2853d6d882bb7
    13:32:01.860 INFO - Command request: click[scLocator=//TreeGrid[ID="isc_TreeGrid_0"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0], ] on session 872b9ff33ad1432eabd2853d6d882bb7
    13:32:02.872 INFO - Got result: ERROR: Element scLocator=//TreeGrid[ID="isc_TreeGrid_0"]/body/row[technologyNumber=4||technologyDescription=ALC%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20||1]/col[fieldName=technologyDescription||0] not found on session 872b9ff33ad1432eabd2853d6d882bb7
    13:32:02.882 INFO - Command request: captureScreenshot[C:\eclipse\workspace\sample-project\test-output\Default suite\TEST-testCase11833577582995738593.png, ] on session null
    13:32:03.209 INFO - Got result: OK on session null
    13:32:03.212 INFO - Command request: selectWindow[null, ] on session 6668eff77f344180ab8789b36a316333
    13:32:03.262 INFO - Got result: OK on session 6668eff77f344180ab8789b36a316333
    13:32:03.264 INFO - Command request: testComplete[, ] on session 872b9ff33ad1432eabd2853d6d882bb7
    13:32:03.264 INFO - Killing Firefox...
    13:32:03.497 INFO - Got result: OK on session 872b9ff33ad1432eabd2853d6d882bb7
    According to the above output, it is saying that the element is not found.

    ***Question to Isomorphic***

    I have exhausted all research from google, SmartClient forums, etc. According to what I have found, most responses explain to be sure to run the Selenium server with the user extensions and verify they are in the same directory. Is there something I am missing in order to get the scLocators to work? Is there a subtle modification I need to make to my testNG class that gets lost in the export? Since the scLocators are auto-generated, I wouldn't think to touch them. Is there a bug with the user-extensions.js? I read the SmartGWT Selenium guide and am out of options at this point. If there is any insight in where to begin, it would be greatly appreciated. I look forward to hearing from the community as well about it.

    Regards,
    JEberhardt

    SmartClient Version: SNAPSHOT_v8.3d_2012-07-09/EVAL Deployment (expires 2012.09.07_06.35.59) Licensed to: Isomorphic Software (#ISC_EVAL_NIGHTLY)
    Browser: Firefox v13.0.1
    Last edited by JEberhardt; 16 Jul 2012, 10:36. Reason: Editing modifications that shouldnt be there.

    #2
    Without the user extensions, what you should see is Selenium throwing an error that "scLocator" is not recognized, so it's a little suspect that you say the test "proceeds" in this case - can you clarify?

    The obvious way for this to fail is for it to fail legitimately - when running the test, is data ever loaded into the TreeGrid? If not, then the test *should* time out.

    Also take a look at the JUnit sample code in the docs, in case TestNG is somehow breaking things.

    Comment


      #3
      Without the user extensions, what you should see is Selenium throwing an error that "scLocator" is not recognized, so it's a little suspect that you say the test "proceeds" in this case - can you clarify?
      I apologize, what I meant was without the user-extensions I can still run it using, this code instead.

      Code:
      selenium.click("//table[@id='isc_Wtable']/tbody[2]/tr[2]/td/div/nobr/table/tbody/tr/td[3]/nobr");
      I was just pointing this out to verify that it wasn't a Selenium issue. (This is not the way to test SmartGWT applications, I'm aware)

      The obvious way for this to fail is for it to fail legitimately - when running the test, is data ever loaded into the TreeGrid? If not, then the test *should* time out.
      I see the data get loaded. That's what I don't understand why it isn't picking up that element. I even used waitForGridDone, and that didn't solve it either.

      Also take a look at the JUnit sample code in the docs, in case TestNG is somehow breaking things.
      I've seen many example issues with the testNG cases passing with SmartGWT. But if it comes to that, I can try to use the test case on JUnit4 RC.

      Comment


        #4
        I've seen many example issues with the testNG cases passing with SmartGWT.
        What do you mean by this - you have other tests working? You've noticed that other people have them working?

        You can, by the way, edit the locators. The format is described in docs - in this case you might remove all the different ways of matching the record except row/column, although this should not matter, it might somehow be part of the problem.

        The fact that waitForGridDone also fails is very suspect however. Are you sure your user-extensions.js file exactly matches the date of the build you're using? Are you sure there are no JavaScript errors as the test is executing?

        Comment

        Working...
        X