Package org.rstudio.studio.selenium

Source Code of org.rstudio.studio.selenium.RConsoleInteraction

/*
* RConsoleInteraction.java
*
* Copyright (C) 2009-13 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.Keys;
import org.rstudio.core.client.ElementIds;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.List;

import junit.framework.Assert;

public class RConsoleInteraction {
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
      driver_ = RStudioWebAppDriver.start();
     
      ConsoleTestUtils.beginConsoleInteraction(driver_);
   }
  
   @AfterClass
   public static void tearDownAfterClass() throws Exception {
      RStudioWebAppDriver.stop();
   }
  
   @Test
   public void testBasicRInteraction() {
       Actions do42 = new Actions(driver_);
       do42.sendKeys(Keys.chord(Keys.CONTROL, "l"));
       do42.sendKeys(Keys.ESCAPE);
       do42.sendKeys("41 + 1");
       do42.sendKeys(Keys.ENTER);
       do42.perform();

       ConsoleTestUtils.waitForConsoleContainsText(driver_, "42");
   }
  
   @Test
   public void testPopupCompletion() {
       // Test invoking autocomplete
       List<WebElement>elements = driver_.findElements(By.id(
             ElementIds.getElementId(ElementIds.POPUP_COMPLETIONS)));
       assertEquals(elements.size(), 0);

       Actions popup = new Actions(driver_);
       popup.sendKeys(Keys.ESCAPE);
       popup.sendKeys("print");
       popup.sendKeys(Keys.TAB);
       popup.perform();
      
       (new WebDriverWait(driver_, 5)).until(new ExpectedCondition<Boolean>() {
          public Boolean apply(WebDriver d) {
             List<WebElement>elements = driver_.findElements(By.id(
                   ElementIds.getElementId(ElementIds.POPUP_COMPLETIONS)));
             return elements.size() > 0;
          }
       });

       // Test cancelling autocomplete once invoked
       Actions close = new Actions(driver_);
       close.sendKeys(Keys.ESCAPE).perform();

       (new WebDriverWait(driver_, 5)).until(new ExpectedCondition<Boolean>() {
          public Boolean apply(WebDriver d) {
             List<WebElement>elements = driver_.findElements(By.id(
                   ElementIds.getElementId(ElementIds.POPUP_COMPLETIONS)));
             return elements.size() == 0;
          }
       });
   }
  
   @Test
   public void testPlotGeneration() {
      ConsoleTestUtils.resumeConsoleInteraction(driver_);

      Actions plotCars = new Actions(driver_);
      plotCars.sendKeys(Keys.ESCAPE + "plot(cars)" + Keys.ENTER);
      plotCars.perform();
     
      // Wait for the Plot window to activate
      final WebElement plotWindow = (new WebDriverWait(driver_, 5))
        .until(ExpectedConditions.presenceOfElementLocated(
              By.id(ElementIds.getElementId(ElementIds.PLOT_IMAGE_FRAME))));
     
      // Wait for a plot to appear in the window
      Assert.assertEquals(plotWindow.getTagName(), "iframe");
      driver_.switchTo().frame(plotWindow);

      (new WebDriverWait(driver_, 5))
        .until(ExpectedConditions.presenceOfElementLocated(By.tagName("img")));
     
      // Switch back to document context
      driver_.switchTo().defaultContent();
   }

   @Test
   public void testInvokeHelp() {
      ConsoleTestUtils.resumeConsoleInteraction(driver_);
      Actions help = new Actions(driver_);
      help.sendKeys(Keys.ESCAPE + "?lapply" + Keys.ENTER);
      help.perform();

      // Wait for the Help window to activate
      final WebElement helpWindow = (new WebDriverWait(driver_, 5))
        .until(ExpectedConditions.presenceOfElementLocated(
              By.id(ElementIds.getElementId(ElementIds.HELP_FRAME))));

      // Wait for help to appear in the window
      Assert.assertEquals(helpWindow.getTagName(), "iframe");
      driver_.switchTo().frame(helpWindow);
     
      (new WebDriverWait(driver_, 5))
        .until(ExpectedConditions.textToBePresentInElement(
              By.tagName("body"), "lapply"));
     
      // Switch back to document context
      driver_.switchTo().defaultContent();
   }

   private static WebDriver driver_;
}
TOP

Related Classes of org.rstudio.studio.selenium.RConsoleInteraction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.