자동화테스트/Selenium2018. 12. 1. 08:00

웹에 게시 된 두 가지 유형의 HTML 표가 있습니다.

  1. 정적 테이블 : 데이터가 정적입니다. 즉 행과 열의 수가 고정되어 있습니다.
  2. 동적 테이블 : 데이터가 동적입니다. 즉, 행과 열의 수가 고정되어 있지 않습니다.

아래는 Sales의 동적 테이블의 예입니다. 입력 된 날짜 필터에 따라 행 수가 변경됩니다. 그래서, 그것은 본질적으로 역동적입니다.

정적 테이블을 다루는 것은 쉽지만 행과 열이 일정하지 않으므로 동적 테이블이 약간 어렵습니다.

이 튜토리얼에서는,

X-Path를 사용하여 웹 테이블 요소 찾기

웹 요소를 찾기 전에 먼저,

웹 요소 란 무엇입니까?

웹 요소 텍스트 상자와 같은 HTML 요소에 지나지 않는다,이 HTML 요소를 작성하는 등 라디오 버튼, 전송 버튼, 드롭 다운 시작 태그와 끝납니다  태그입니다.

예를 들어,

<p> 나의 첫 번째 HTML 문서 </ p>.

웹 요소의 X 경로를 가져 오는 단계입니다.

1 단계) Chrome에서 http://money.rediff.com/gainers/bsc/daily/groupa로 이동합니다 .

2) X 경로를 가져올 웹 요소를 마우스 오른쪽 버튼으로 클릭합니다. 우리의 경우 "Company"를 오른쪽 클릭하십시오. Inspect 옵션을 선택하십시오. 다음 화면이 표시됩니다.

3 단계) 강조 표시된 웹 요소> 복사 선택 -> x- 경로 복사 옵션을 마우스 오른쪽 버튼으로 클릭합니다.

4 단계) Selenium WebDriver에서 복사 된 X 경로 "// * [@ id ="leftcontainer "] / table / thead / tr / th [1]"을 사용하여 요소를 찾습니다.

예 : Dynamic WebTable에서 행 및 열 수 가져 오기

테이블이 본질적으로 동적 인 경우 행과 열의 수를 예측할 수 없습니다.

Selenium 웹 드라이버를 사용하여

  • 웹 테이블의 행 및 열 수
  • X 행 또는 Y 열의 데이터.

아래는 웹 테이블의 총 행과 열 수를 가져 오는 프로그램입니다.

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class Noofrowsandcols {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
	  System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
	  wd= new ChromeDriver();
        wd.get("http://money.rediff.com/gainers/bsc/dailygroupa?");         
        //No.of Columns
        List  col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th"));
        System.out.println("No of cols are : " +col.size()); 
        //No.of rows 
        List  rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); 
        System.out.println("No of rows are : " + rows.size());
        wd.close();
    }
}

코드 설명 :

  • 여기서는 먼저 Web Driver 객체 "wd"를 선언하고 크롬 드라이버로 초기화했습니다.
  • List <WebElement>를 사용하여 "col"의 총 열 수를 계산합니다.
  • findElements 명령은 지정된 로케이터와 일치하는 모든 요소의 목록을 반환합니다.
  • findElements와 X-path를 사용 // * [@ id = \ "leftcontainer \"] / table / thead / tr / th 우리는 모든 컬럼을 얻는다.
  • 마찬가지로 행에 대한 프로세스를 반복합니다.

.

산출:

예 : 동적 테이블의 특정 행과 열에 대한 셀 값 가져 오기

테이블의 세 번째 행과 두 번째 셀의 데이터 가 필요하다고 가정 해 봅시다 아래 표를 참조하십시오.

위의 표에서 데이터는 일정 기간 후에 정기적으로 업데이트됩니다. 검색하려는 데이터는 위의 스크린 샷과 다를 수 있습니다. 그러나 코드는 동일하게 유지됩니다. 다음은 3 번째 행과 2 번째 열의 데이터 를 얻기위한 샘플 프로그램 입니다.

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;


public class RowandCell {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("http://money.rediff.com/gainers/bsc/daily/groupa?"); 
		 wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		 WebElement baseTable = wd.findElement(By.tagName("table"));
		  
		 // 테이블의 세 번째 행을 찾으려면
		 WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]"));
         String rowtext = tableRow.getText();
		 System.out.println("Third row of table : "+rowtext);
		    
		    // 세 번째 행의 두 번째 열 데이터를 가져 오려면
		    WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]"));
		    String valueIneed = cellIneed.getText();
		    System.out.println("Cell value is : " + valueIneed); 
		    wd.close();
    }
}

코드 설명 :

  • 표는 로케이터 특성 "tagname"을 사용하여 위치합니다.
  • 사용 XPath를 '//'* @ ID = \ "leftcontainer의 \"] / 표 / TBODY / TR [3] "를 찾는 3 번째의 행 및 gettext에 도착을 사용하여 텍스트 () 함수
  • Xpath "를 사용하여 3 번째 줄 의 두 번째 셀을 찾고 getText () 함수를 사용하여 텍스트를 가져옵니다 ."/ / table / tbody / tr [3] / td [2]

출력 :

예 : 동적 테이블의 열에있는 모든 값의 최대 값 얻기

이 예에서는 특정 열의 모든 값 중 최대 값을 얻습니다.

다음 표를 참조하십시오 -

여기에 코드가있다.

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.text.NumberFormat;


public class MaxFromTable {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
		System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
		 wd= new ChromeDriver();
		 wd.get("http://money.rediff.com/gainers/bsc/daily/groupa?"); 
		 String max;
	     double m=0,r=0;
		 
	       //No. of Columns
	        List  col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th"));
	        System.out.println("Total No of columns are : " +col.size());
	        //No.of rows
	        List  rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]"));
	        System.out.println("Total No of rows are : " + rows.size());
	        for (int i =1;i<rows.size();i++)
	        {    
	            max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText();
	            NumberFormat f =NumberFormat.getNumberInstance(); 
	            Number num = f.parse(max);
	            max = num.toString();
	            m = Double.parseDouble(max);
	            if(m>r)
	             {    
	                r=m;
	             }
	        }
	        System.out.println("Maximum current price is : "+ r);
    }
}

코드 설명 :

  • 크롬 드라이버를 사용하여 우리는 웹 테이블을 찾고 XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"을 사용하여 총 행 수를 얻습니다. "
  • for 루프를 사용하여 총 행 수를 반복하고 값을 하나씩 가져옵니다. 다음 행을 얻으려면 XPath에서 (i + 1)을 사용합니다.
  • 이전 값과 새로운 값을 비교하고 최대 값은 for 루프의 끝에서 출력됩니다.

산출

예 : 동적 테이블의 모든 값 가져 오기

다음 표를 고려하십시오. http://demo.guru99.com/test/table.html

각 행의 열 수가 다릅니다.

여기서 행 번호 1, 2 및 4에는 3 개의 셀이 있고 행 번호 3에는 2 개의 셀이 있고 행 번호 5에는 1 개의 셀이 있습니다.

우리는 모든 세포의 가치를 얻을 필요가있다.

다음은 코드입니다.

import java.text.ParseException;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeDriver;



public class NofRowsColmns {
    public static void main(String[] args) throws ParseException {
    	WebDriver wd;
    	System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");
    	wd = new ChromeDriver();
    	wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    	wd.get("http://demo.guru99.com/test/table.html");
    	// 테이블을 찾습니다.
    	WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody"));
    	// 테이블 행을 찾습니다. 
    	List < WebElement > rows_table = mytable.findElements(By.tagName("tr"));
    	// 테이블의 행 수를 계산합니다.
    	int rows_count = rows_table.size();
    	// 루프는 table의 마지막 행까지 실행됩니다.
    	for (int row = 0; row < rows_count; row++) {
    	    // 특정 행의 열 (셀)을 찾습니다.
    	    List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
    	    // 그 특정한 행에 열 (셀)을 계산합니다
    	    int columns_count = Columns_row.size();
    	    System.out.println("Number of cells In Row " + row + " are " + columns_count);
    	    // 루프는 특정 행의 마지막 셀까지 실행됩니다.
    	    for (int column = 0; column < columns_count; column++) {
    	        // 특정 셀에서 텍스트를 검색합니다.
    	        String celtext = Columns_row.get(column).getText();
    	        System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
    	    }
    	    System.out.println("-------------------------------------------------- ");
    	}
   	}
}

코드 설명 :

  • rows_count는 총 행 수를 나타냅니다.
  • 각 행에 대해 rows_table.get (row) .findElements (By.tagName ( "td"));를 사용하여 총 열 수를 얻습니다.
  • 각 열과 각 행을 반복하여 값을 가져옵니다.

출력 :

개요

  • 정적 웹 테이블은 사실상 일관성이 있습니다. 즉 셀 데이터뿐만 아니라 행 수가 고정되어 있습니다.
  • 동적 웹 테이블은 일관성이 없습니다. 즉, 고정 행 번호와 셀 데이터가 없습니다.
  • 셀레늄 웹 드라이버를 사용하여 동적 웹 테이블을 쉽게 처리 할 수 ​​있습니다.
  • Selenium Webdriver를 사용하면 X 경로로 동적 웹 테이블에 액세스 할 수 있습니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터