๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQA/Automation

Selenium ์›น์—์„œ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ, ๋ชจ๋ฐ”์ผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋˜์–ด ์žˆ๋‹ค. ์‹ค์ œ ๋‹จ๋ง ์—†์ด๋„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šค๋งˆํŠธํฐ ๋‹จ๋ง์˜ ํ™˜๊ฒฝ์„ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์•ฑ ํ˜•ํƒœ์˜ ์„œ๋น„์Šค๋ผ๋ฉด ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์›น ํ˜•ํƒœ์˜ ์„œ๋น„์Šค์—์„œ๋Š” ์ ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ชจ๋ฐ”์ผ-์—๋ฎฌ๋ ˆ์ดํ„ฐ
๋ชจ๋ฐ”์ผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ

 

 

 

Chrome์—์„œ ๋ชจ๋ฐ”์ผ ์• ๋ฎฌ๋ ˆ์ด์…˜ ์‚ฌ์šฉ

๋ชจ๋ฐ”์ผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ชจ๋ฐ”์ผ ์• ๋ฎฌ๋ ˆ์ด์…˜ ์‚ฌ์šฉ๋ฒ•

F12๋กœ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์ผ ๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ขŒ์ธก ์ƒ๋‹จ์˜ ๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•œ๋‹ค.

๋ชจ๋ฐ”์ผ-์—๋ฎฌ๋ ˆ์ดํ„ฐ-๋ฒ„ํŠผ
๋ชจ๋ฐ”์ผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฒ„ํŠผ

 

์ƒ๋‹จ์˜ ์˜ต์…˜๋“ค์„ ๋ณ€๊ฒฝํ•ด๋ณด๋ฉด์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์™€ ํ…Œ์Šคํ„ฐ๋Š” ์‹ค์ œ ๊ธฐ๊ธฐ ์—†์ด๋„ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

์…€๋ ˆ๋‹ˆ์›€์—์„œ ๋ชจ๋ฐ”์ผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ

ChromeOptions ์„ค์ •์œผ๋กœ ์…€๋ ˆ๋‹ˆ์›€ ์›น๋“œ๋ผ์ด๋ฒ„ ํ…Œ์ŠคํŠธ์—์„œ๋„ ๋ชจ๋ฐ”์ผ ์—๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฒ€์ƒ‰ ์˜ˆ์ œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌ๊ธ€ ํ”ฝ์…€2์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

package com.example;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
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.chrome.ChromeOptions;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

import java.util.HashMap;
import java.util.Map;

public class ChromeHeadlessTest {
	
	WebDriver driver;
	
  @Test
  public void f() {
	  //ํ…Œ์ŠคํŠธํ•  ์ฝ”๋“œ
	  
  }
  @BeforeMethod
  public void beforeMethod() {
	  System.setProperty("webdriver.chrome.driver", "./src/test/resources/drivers/chromedriver");
	  
	  
	  // ๋„ˆ๋น„์™€ ๋†’์ด ๊ฐ™์€ ๊ธฐ๊ธฐ ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค. 
	  Map<String, Object> deviceMetrics = new HashMap<>();
	  deviceMetrics.put("width", 411);
	  deviceMetrics.put("heght", 823);
	  deviceMetrics.put("pixelRatio", 3.0);
	  
	  Map<String, Object> mobileEmulation = new HashMap<>();
	  mobileEmulation.put("deviceMetrics", deviceMetrics);
	  mobileEmulation.put("userAgent", "Mozilla/5.0 (Linux; Android 8.0.0;" +
	  "Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) " +
			  "Chrome/67.0.3396.99 Mobile Safari/537.36");
	  
	  
	  
	  ChromeOptions chromeOptions = new ChromeOptions();
	  chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
	  
	  driver = new ChromeDriver(chromeOptions);
	  
	  driver.get("http://www.naver.com/");
  }

  @AfterMethod
  public void afterMethod() {
	 driver.quit();
 
  }
}

 

๋„ค์ด๋ฒ„ํ™ˆ์„ ๋ชจ๋ฐ”์ผ ์• ๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ์ง„์ž…ํ•˜๋‹ˆ ๋ชจ๋ฐ”์ผurl๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. (m.naver.com)

๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์—˜๋ฆฌ๋จผํŠธid๋ฅผ ๊ตฌํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๋˜, ๋„ค์ด๋ฒ„๋ชจ๋ฐ”์ผ์€ ๊ฒ€์ƒ‰์ฐฝ์„ ํ•œ๋ฒˆ ํด๋ฆญํ•œ ๋‹ค์Œ์— ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์— ๋งž์ถฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์‹œ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

 

๊ฐœ๋ฐœ์ž ๋„๊ตฌ > Network ํƒญ์—์„œ ์›ํ•˜๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์˜ userAgent ๋ฌธ์ž์—ด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ์•„์ดํฐ12pro์ด๋‹ค.

๋ชจ๋ฐ”์ผ-๊ธฐ๊ธฐ-userAgent
๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ userAgent