웹에 게시 된 두 가지 유형의 HTML 표가 있습니다.
- 정적 테이블 : 데이터가 정적입니다. 즉 행과 열의 수가 고정되어 있습니다.
- 동적 테이블 : 데이터가 동적입니다. 즉, 행과 열의 수가 고정되어 있지 않습니다.
아래는 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 경로로 동적 웹 테이블에 액세스 할 수 있습니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
(selenium) 암시 적 대기 및 명시적인 셀레니움 대기 (0) | 2018.12.03 |
---|---|
XPath에는 Selenium WebDriver의 형제, 조상 함수가 포함 (0) | 2018.12.02 |
Selenium WebDriver의 Alert(경고창) & Popup Window(팝업창) Handling(다루기) (1) | 2018.11.30 |
명령 프롬프트에서 TestNG 프로젝트 및 실패한 테스트 케이스를 실행하는 방법 (0) | 2018.11.28 |
TestNG 튜토리얼 : 주석, 프레임 워크, Selenium 예제 (1) | 2018.11.27 |