2018年1月17日星期三

使用selenium webdriver测试失败时如何捕获屏幕截图

正如我们所知,知道测试失败背后的原因非常重要,我们需要在测试用例失败时捕获屏幕截图。测试失败背后的原因可能是我们自动化脚本中的应用程序或错误中的错误,以便了解在测试用例故障上捕获屏幕截图非常重要的确切问题。

我已经写了一篇关于如何拍摄截图的帖子,您可以在此引用该帖子。在此帖子中,我们将在测试用例故障时看到如何捕获屏幕截图。

1. iTestresult接口  - 这将为我们提供测试用例执行状态和测试案例名称。
2. @Aftermethod. - Testng的注释将在之后执行 每次测试执行都无论如何 测试案例通过或失败@aftermethod将 always execute.

让我们看看完整的代码 -




package captureScreenshot;
 
// Import all classes and interface
import java.io.File;
import library.Utility;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
 
public class   Facebook  ScreenshotExample {
 
// Create Webdriver reference
WebDriver driver; 
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Anuja.AnujaPC\\Downloads\\chromedriver_win32\\chromedriver.exe");
 driver=new ChromeDriver(); 

 @Test
public void captureScreenshot() throws Exception
{
 
// Initiate Chrome browser

 
// Maximize the browser
driver.manage().window().maximize();
 
// Pass application url
driver.get("http://www.facebook.com");
 
// Here we are forcefully passing wrong id so that it will fail our testcase
driver.findElement(By.xpath(".//*[@id='emailasdasdas']")).sendKeys("QA自动化");
 
 
}
 
 
 
 
 
// It will execute after every test execution 
@Aftermethod.
public void tearDown(ITestResult result)
{
 
// Here will compare if test is failing then only it will enter into if condition
if(ITestResult.FAILURE==result.getStatus())
{
try 
{
// Create refernce of TakesScreenshot
TakesScreenshot ts=(TakesScreenshot)driver;
 
// Call method to capture screenshot
File source=ts.getScreenshotAs(OutputType.FILE);
 
// Copy files to specific location here it will save all screenshot in our project home directory and
// result.getName() will return name of test case so that screenshot name will be same
FileUtils.copyFile(source, new File("./ScreenShots/"+result.getName()+".png"));
 
System.out.println("Screenshot taken");
} 
catch (Exception e)
{
 
System.out.println("Exception while taking screenshot "+e.getMessage());
} 
 
 
 
}
// close application
driver.quit();
}
 
 
 
}

2018年1月16日星期二

如何使用Selenium webdriver滚动

在这篇文章中,我们将讨论我们可以使用Selenium滚动的究竟是多么滚动。 不幸的是,硒没有内在的方法,使我们能够 滚动进入视图,但是,我们可以使用JavaScript Executor滚动到Selenium中的视图。


现在让我们看看如何使用Selenium WebDriver滚动的详细代码



package test;


import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class ScrollTest {
 
     @Test
 public  void test() {

  // Start browser
  System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
  WebDriver driver=new ChromeDriver();


  // Maximize browser

  driver.manage().window().maximize();



  // Pass application URL

  driver.get("http://www.yubo666.com");



  // Create instance of Javascript executor

  JavascriptExecutor je = (JavascriptExecutor) driver;



  //Identify the WebElement which will appear after scrolling down

  WebElement element = driver.findElement(By.xpath(".//*[@id='colophonpbt']"));



  // now execute query which actually will scroll until that element is not appeared on page.

  je.executeScript("arguments[0].scrollIntoView(true);",element);



  // Extract the text and verify

  System.out.println(element.getText());
  
  //close browser
  driver.quit();

  }
     
}