다음 사이트 로그인 후 메일로 이동하고자 함

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 quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);
		driver.findElement(By.id("loginBtn")).click();
        
		driver.get("https://mail.daum.net/"); // 로그아웃 된 후 이동

		Thread.sleep(5000);
		driver.close(); 

	}
}

 

문제점 : 페이지 이동시 로그아웃

 

이유 : 로그인은 서버와 데이터를 부고 받아서 이루어진다. 코드 동기화 문제

1) 로그인 처리가 완료되지 않은 상태로 이동

2) 로그인 처리 중이라 이동명령 무시

 

따라서 로그인 명령을 내린후 로그인이 처리될 시간을 줘야함

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 quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);

		driver.findElement(By.id("loginBtn")).click();
		
		Thread.sleep(1000); //로그인이 처리될 시간
		driver.get("https://mail.daum.net/");

		Thread.sleep(5000);
		driver.close(); 

	}
}

Thread.sleep(1000);

불리한 경우

1) 트랙픽이 몰리면 1초로는 부족할 수도 있다.

2) 1초보다 빨리 로그인이 수행될 경우 남은 시간을 기다려야함


WebDriverWait

웹드라이버에 대기 시간을 주는 객체

		WebDriverWait wait = new WebDriverWait(driver,10); // 10초
wait.until(ExpectedConditions.)

 

명시적 대기

조건이 충족 될때 까지 대기

wait.until(ExpectedConditions.urlToBe("https://www.daum.net/")); //명시적 대기

묵시적 대기

Thread.sleep(5000); //묵시적 대기

내게 쓰기

1) url로 갈수 있는가?

2) url로 갈 수 없다면 눌러줘야함

 

클래스로 선택시 몇개가 나오는지 확인

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 org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);
		driver.findElement(By.id("loginBtn")).click();
		
		wait.until(ExpectedConditions.urlToBe("https://www.daum.net/"));
		
		driver.get("https://mail.daum.net/");

		List<WebElement> btns = driver.findElements(By.className("btn_my"));
		System.out.println(btns.size()); // 1
		
		Thread.sleep(5000);
		driver.close(); 

	}
}

 


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 org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);
		driver.findElement(By.id("loginBtn")).click();
		
		wait.until(ExpectedConditions.urlToBe("https://www.daum.net/"));
		
		driver.get("https://mail.daum.net/");

		List<WebElement> btns = driver.findElements(By.className("btn_my"));
		
		btns.get(0).click();

		Thread.sleep(5000);
		driver.close(); 
	}
}

 

실행되지 않을시

서버의 승인전에 실행되서 실패했을 가능성 확인

묵시적 대기(Thread.sleep)로 테스트

public class quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);
		driver.findElement(By.id("loginBtn")).click();
		
		wait.until(ExpectedConditions.urlToBe("https://www.daum.net/"));
		driver.get("https://mail.daum.net/");
		
		Thread.sleep(2000); // 테스트용 대기 시간 2초
		List<WebElement> btns = driver.findElements(By.className("btn_my"));	
		btns.get(0).click();

		Thread.sleep(5000);
		driver.close(); 
	}
}

Thread.sleep 대신에

elementToBeClickable

public class quiz01 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		driver.get("https://logins.daum.net/accounts/signinform.do?url=https%3A%2F%2Fwww.daum.net%2F");

		driver.findElement(By.id("id")).sendKeys(Account.id);
		driver.findElement(By.id("inputPwd")).sendKeys(Account.pw);
		driver.findElement(By.id("loginBtn")).click();
		
		wait.until(ExpectedConditions.urlToBe("https://www.daum.net/"));
		
		driver.get("https://mail.daum.net/");
		
        //클릭 가능 할때까지 대기
		wait.until(ExpectedConditions.elementToBeClickable(By.className("btn_my")));

		List<WebElement> btns = driver.findElements(By.className("btn_my"));
		btns.get(0).click();

		Thread.sleep(5000);
		driver.close(); 
	}
}

실패 : 추가 분석 필요

 

메일 페이지 로딩

메일로딩 인디케이터가 덮음

인티케이터 지워짐


By.xpath

성능이 좋진 않지만 최후의 수단

+ Recent posts