O anterior nesta série, você expôs os conceitos básicos dos testes de selênio.No entanto, neste blog, direi como usar uma estrutura Selenium para otimizar sua estrutura de código e isso o deixará mais perto de se tornar um .
O que é uma estrutura Selenium?
O framework Selenium é uma estrutura de código para tornar a manutenção do código mais simples e melhor legibilidade do código. Uma estrutura envolve quebrar o código inteiro em pedaços menores de código, que testam uma funcionalidade específica.
O código é estruturado de forma que o “conjunto de dados” seja separado do “caso de teste” real que testará a funcionalidade do aplicativo da web. Também pode ser estruturado de forma que os casos de teste que precisam ser executados sejam chamados (invocados) a partir de um aplicativo externo (como um .csv).
Há uma série de frameworks por aí, mas 3 framework (s) Selenium comumente usados são:
Essas estruturas serão discutidas com uma demonstração neste blog. Mas antes de prosseguir, deixe-me dizer por que uma estrutura Selenium precisa estar em vigor e quais benefícios você obterá ao usá-la.
Por que precisamos de uma estrutura Selenium?
Sem uma estrutura implementada, haverá um caso de teste que compreenderá toda a funcionalidade de teste. A parte assustadora é que esse único caso de teste tem a capacidade de aumentar até um milhão de linhas de código. Portanto, é bastante óbvio que um caso de teste tão grande será difícil de ler. Mesmo se você quiser modificar qualquer funcionalidade posteriormente, terá dificuldade em modificar o código.
o que é sobrecarga de função em c ++
Uma vez que a implementação de uma estrutura resultará em partes de código menores, mas múltiplas, há vários benefícios.
Benefícios da estrutura Selenium
- Maior reutilização de código
- Melhor legibilidade do código
- Maior portabilidade
- Roteiro reduzidomanutenção
Agora que você conhece o básico dos frameworks, deixe-me explicar cada um deles em detalhes.
Estrutura baseada em dados
Um framework Data Driven no Selenium é a técnica de separar o “conjunto de dados” do “caso de teste” real (código). Esta estrutura depende completamente dos dados de teste de entrada. Os dados de teste são alimentados por fontes externas, como um arquivo Excel, arquivo .CSV ou qualquer banco de dados.
Uma vez que o caso de teste é separado do conjunto de dados, podemos modificar facilmente o caso de teste de uma funcionalidade específica sem fazer alterações no seu código. Por exemplo, se você deseja modificar o código para a funcionalidade de login, pode modificar apenas isso, em vez de ter que modificar também qualquer outra parte dependente no mesmo código.
Além disso, você também pode controlar facilmente a quantidade de dados que precisa ser testada. Você pode aumentar facilmente o número de parâmetros de teste adicionando mais campos de nome de usuário e senha ao arquivo Excel (ou outras fontes).
Por exemplo, se eu tiver que verificar o login em uma página da web, posso manter o conjunto de credenciais de nome de usuário e senha em um arquivo excel e passar as credenciais para o código para executar automação no navegador em um arquivo de classe Java separado.
Usando Apache POI com Selenium WebDriver
O WebDriver não oferece suporte direto à leitura de arquivos do Excel. Por isso usamos Apache POI para ler / gravar em qualquer documento do Microsoft Office. Você pode baixar Apache POI (conjunto de arquivos JAR) em Aqui . Baixe o arquivo zip ou o arquivo tar de acordo com sua necessidade e coloque-os junto com o conjunto de JARs do Selenium.
A coordenação entre o código principal e o conjunto de dados será feita por Provedores de dados TestNG, que é uma biblioteca que vem como parte dos arquivos Apache POI JAR. Para fins de demonstração, criei um arquivo excel chamado “LoginCredentials” no qual os nomes de usuário e senhas foram armazenados em colunas diferentes.
java encontra o maior número na matriz
Dê uma olhada no código abaixo para entender o caso de teste. É um código simples para testar a funcionalidade de login de um aplicativo de reserva de voos.
pacote DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test public class DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) throws InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('password' )). sendKeys (senha) driver.findElement (By.name ('login')). click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). corresponde ('Encontrar um voo: Mercury Tours: '),' Credenciais inválidas ') System.out.println (' Login bem-sucedido ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] credentials = new Object [rows] [2] para (int i = 0iSe você notou acima, temos um método chamado “TestDataFeed ()”. Neste método, criei uma instância de objeto de outra classe chamada “ReadExcelFile”. Ao instanciar este objeto, alimentei o caminho do meu arquivo Excel contendo os dados. Além disso, defini um loop for para recuperar o texto da pasta de trabalho do Excel.
Mas, para ler os dados de um determinado número de folha, número de coluna e número de linha, as chamadas são feitas para a classe “ReadExcelFile”. O código do meu “ReadExcelFile” está abaixo.
pacote DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadExcelFile (String excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public String getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}Primeiro observe as bibliotecas que importei. Eu importei Apache POI XSSF bibliotecas que são usadas para ler / gravar dados em arquivos do Excel. Aqui, criei um construtor (objeto do mesmo método) para passar os valores: número da folha, número da linha e número da coluna. Para entender melhor essa estrutura, solicito que você consulte o vídeo abaixo, onde expliquei isso de maneira estruturada.
Data Driven Framework no Selenium WebDriver | Selenium Tutorial
Agora vamos passar para a estrutura, ou seja, a estrutura baseada em palavras-chave.
Estrutura baseada em palavras-chave
Estrutura orientada por palavras-chave é uma técnica em que todas as operações e instruções a serem realizadas são escritas separadamente do caso de teste real. A semelhança que tem com o framework Data Driven é que, as operações a serem realizadas são novamente armazenadas em um arquivo externo como uma planilha Excel.
As operações de que estou falando nada mais são do que os métodos que precisam ser executados como parte de um caso de teste. O benefício da estrutura baseada em palavras-chave é que você pode controlar facilmente as funcionalidades que deseja testar. Você pode especificar os métodos que testam a funcionalidade do aplicativo no arquivo Excel. Assim, apenas os nomes de métodos especificados no Excel serão testados.
Por exemplo, para fazer login no aplicativo da web, podemos escrever vários métodos no caso de teste principal, em que cada caso de teste testará certa funcionalidade. Para instanciar o driver do navegador, pode haver um método, para encontrar os campos de nome de usuário e senha, pode haver métodos, para navegar para uma página da web pode haver outro método, etc.
Dê uma olhada no código abaixo para entender a aparência da estrutura. As linhas comentadas no código abaixo servem como explicação se você não entender.
pacote KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver public class Actions {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')). Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Encontre um voo: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}Como você pode ver, as diferentes funcionalidades que precisam ser testadas estão presentes em métodos separados esperando para serem chamados. Agora, esses métodos serão chamados de outra classe, com base na presença do nome do método no arquivo excel. E da mesma forma, para ler o arquivo excel e devolver os resultados, escrevi outra aula. Ambos são exibidos abaixo.
O arquivo de classe que invoca os métodos é este.
mongodb criar usuário para banco de dadospacote KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Declarando o caminho do arquivo Excel com o nome do arquivo Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Aqui estamos passando o caminho do Excel e SheetName como argumentos para conectar com o arquivo Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Valores codificados são usados para linhas e colunas do Excel por enquanto // Valores codificados são usados para linhas do Excel & colunas por agora // Em capítulos posteriores, substituiremos esses valores codificados por varibales // Este é o loop para ler os valores da coluna 3 (palavra-chave de ação) linha por linha para (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } }E o arquivo de classe que lê os valores do Excel é este.
pacote KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell public class ReadExcelData {private static XSSFSheet ExcelWSheet privado estático XSSFWorkbook ExcelWBook privado estático XSSFCell Cell // Este método é para definir o caminho do arquivo e abrir o arquivo do Excel // Passar Excel Path e SheetName como argumentos para este método public static void setExcelFile (String Path, String SheetName) throws Exceção {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Este método é para ler os dados de teste da célula do Excel // Neste estamos passando parâmetros / argumentos como Row Num e Col Num public static String getCellData (int RowNum, int ColNum) lança Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}Agora, vamos passar para a parte final deste blog da estrutura Selenium, onde mostrarei como construir uma estrutura híbrida.
Estrutura híbrida
A estrutura híbrida é uma técnica na qual podemos fazer o melhor uso das estruturas do Selenium, baseadas em dados e baseadas em palavras-chave. Usando os exemplos mostrados acima neste blog, podemos construir uma estrutura híbrida armazenando os métodos a serem executados em um arquivo Excel (abordagem baseada em palavras-chave) e passando esses nomes de método para o Java Reflection Class (abordagem baseada em dados) em vez de criar um If / Else loop na classe “DriverScript”.
Dê uma olhada na classe modificada “DriverScript” no trecho de código abaixo.Aqui, em vez de usar vários loops If / Else, a abordagem baseada em dados é usada para ler os nomes dos métodos do arquivo Excel.
pacote HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Este é um objeto de classe, declarado como 'public static' // Para que possa ser usado fora do escopo do método main [] public static Actions actionKeywords public static String sActions // Este é um objeto de classe de reflexão, declarado como 'public static' // Para que possa ser usado fora do escopo do método main [] public static Method método [] public static void main (String [] args) lança Exceção {// Declarando o caminho do arquivo Excel com o nome do arquivo Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Aqui estamos passando o caminho do Excel e SheetName para conectar com o arquivo Excel // Este método foi criado anteriormente ReadExcelData.setExcelFile (sPath, 'Sheet1') // Os valores codificados são usados para linhas e colunas do Excel por enquanto // Mais tarde, usaremos esses valores codificados com muito mais eficiência // Este é o loop para leitura os valores da linha da coluna (palavra-chave de ação) por linha // Significa que este loop executará todas as etapas mencionadas para o caso de teste na planilha Etapas de teste para (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0iPara entender melhor esse conceito de estruturas orientadas a dados, palavras-chave e híbridas, solicito que você assista ao vídeo abaixo.
Selenium Framework usando Java | Tutorial do Selênio | Selenium Training Online
Espero que este blog tenha sido útil para você e tenha dado uma compreensão clara do que é uma estrutura Selenium, como ela é benéfica e como construir sua estrutura de código usando essas três estruturas Selenium. Fique ligado em mais blogs desta série.
Se você deseja aprender Selenium e construir uma carreira no domínio de testes, confira nosso site interativo ao vivo online aqui, ele vem com suporte 24 horas por dia, 7 dias por semana para guiá-lo durante o período de aprendizado. Os conceitos relacionados à 'Estrutura do Selênio' são abrangentes em profundidade no curso de Edureka.
Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você.