On 2/17/10 6:44 PM, Vincent Massol wrote:
>
> On Feb 17, 2010, at 6:31 PM, Marius Dumitru Florea wrote:
>
>> Hi Vincent,
>>
>> Vincent Massol wrote:
>>> Hi,
>>>
>>> Yesterday I wanted to add some functional tests for Create page/space 
>>> actions and I found that the Selenium version we're using doesn't work on 
>>> Snow Leopard (my OS) so I started looking at issues and found that the pb 
>>> was fixed in Selenium2/WebDriver. Since I had wanted to explore it for a 
>>> while I took the time to do a quick exploration...
>>>
>>> Selenium2 is the merge of Selenium and WebDriver.
>>>
>>> Pros of Selenium2:
>>> * No more JS sandbox. In selenium1 all the selenium API is executed as JS 
>>> in the browser. In Selenium2 the browsers are controlled using their native 
>>> APIs (JNA).
>>> * Faster (as a consequence of the previous point)
>>> * Allows to do stuff such as file uploads, etc since there's no longer the 
>>> issue of the JS sandbox
>>> * No need to start a Selenium Proxy. All you need is to start XE and then 
>>> you can run the tests as simple JUnit tests.
>>> * The API is much cleaner (this is to be expected with hindsight). See 
>>> http://seleniumhq.org/docs/09_webdriver.html
>>
>>> * There's a very fast executing HtmlUnit driver (not to be used with tests 
>>> using JS though since it emulates browser JS support and thus cannot 
>>> guarantee the result in the real browser)
>>
>> GWT2.0 uses HtmlUnit by default to run the unit tests and its JS support
>> is still limited. I can't run most of the RichTextArea tests.
>>
>>>
>>> Now Selenium2 also recommends to use the PageObject pattern which IMO is a 
>>> very good pattern that we should use. More here:
>>> http://code.google.com/p/selenium/wiki/PageObjects
>>
>> +1 I like it too. We could have used this pattern with Selenium 1 too (
>> something like
>> http://svn.xwiki.org/svnroot/xwiki/enterprise/trunk/distribution-test/wysiwyg-tests/src/test/it/com/xpn/xwiki/it/selenium/framework/XWikiExplorer.java
>> ).
>>
>>>
>>> In order to get a feel of it, I've committed a first test in the sandbox 
>>> using the PageObjects pattern:
>>> http://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/webdriver-ui-tests/
>>>
>>> To run the test:
>>> * Start a local XE on port 8080
>>> * Open the project in your IDE and run LoginTest as a JUnit test
>>>
>>> Let me know what you think.
>>>
>>> My opinion
>>> * We should test it more, on Ajaxy web pages to verify it's stable and 
>>> working well enough
>>> * If that works well enough then we could make it our default way of 
>>> writing functional UI tests and start migrating existing tests one by one + 
>>> write new ones in it
>>
>> I'll try to migrate some of the WYSIWYG Selenium tests to see how it works.
>
> Note that webdriver.get(url) will just wait for onLoad event to be fired so 
> if you have js code that execute after you might need to wait for elements. 
> Here's how to implement a wait:
>
> // Wait for up to 15 seconds
> Wait<WebDriver>  wait = new WebDriverWait(driver, 15);
> WebElement element =
>      wait.until(visibilityOfElementLocated(By.name("foo"));
>
> where that "visibility" method is defined as something like:
>
> public WebElement visibilityOfElementLocated(final By locator) {
>    return new ExpectedCondition<WebElement>() {
>      public WebElement apply(WebDriver driver) {
>        RenderedWebElement element =
>            (RenderWebElement) driver.findElement(locator);
>        return element.isDisplayed() ? element : null;
>      }
>    }
>
> }

The correct way is :

         Wait<WebDriver> wait = new WebDriverWait(driver, timeout);
         wait.until(new ExpectedCondition<WebElement>()
         {
             public WebElement apply(WebDriver driver)
             {
                 RenderedWebElement element = (RenderedWebElement) 
driver.findElement(locator);
                 return element.isDisplayed() ? element : null;
             }
         });

(Your visibilityOfElementLocated method should return 
a ExpectedCondition, not a WebElement).

Jerome.
>
> Thanks
> -Vincent
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to