Linux์˜ C#์—์„œ Selenium ํ…Œ์ŠคํŠธ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์…€๋ ˆ๋‹ˆ์›€ ์ž๋™ ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์˜ ๊ณตํ†ต ์†”๋ฃจ์…˜ C# ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์กฐํ•ฉํ•ด๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด Windows์šฉ Microsoft์˜ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋…์  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ด ์ž‘์—…์„ ์œ„ํ•ด Selenium + C# ์Šคํƒ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ ๋„ ์–ด๋–ค ๋ฌด๋ฃŒ ์•„๋‚ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋Ÿฌ์‹œ์•„์–ด ๊ธฐ์‚ฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Linux์—์„œ C#์œผ๋กœ ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋œ OS๋Š” Linux ์ปค๋„ 18.04-64-generic์ด ํฌํ•จ๋œ Kubuntu 4.15.0 99๋น„ํŠธ์˜€์œผ๋ฉฐ, ๋‹ค์Œ์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ISO ์ด๋ฏธ์ง€๋กœ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์‚ฌ์ดํŠธ. ๋‚˜๋Š” ํ˜„๋Œ€์ ์ด๊ณ  ๊ฝค ์ธ๊ธฐ ์žˆ๋Š” ์–ด๋–ค Linux ๋ฐฐํฌํŒ์ด๋ผ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

Mono JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „ 6.6.0.166์€ C#์šฉ CLR ์—ญํ• ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋Š” ๋ช…๋ น์„ ํ„ฐ๋ฏธ๋„(์ฟ ๋ถ„ํˆฌ์—์„œ๋Š” Konsole)์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์˜.

๊ทธ๋ฆฌ๊ณ  IDE๋กœ ์‚ฌ์šฉ MonoDevelop 7.8.4(๋นŒ๋“œ 2), Mono์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

Selenium์€ ๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฒŒ์„๋Ÿฌ์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋กฌ'์–ด๋จธ, ์„ค์น˜ ์™„๋ฃŒ 64๋น„ํŠธ .deb ํŒจํ‚ค์ง€.

๋‹ค์Œ์œผ๋กœ MonoDevelop์—์„œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • MonoDevelop ์‹คํ–‰
  • "ํŒŒ์ผ"๋ฉ”๋‰ด๋กœ ์ด๋™
  • "์†”๋ฃจ์…˜ ๋งŒ๋“ค๊ธฐ"๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
  • โ€œ.NETโ€์„ ํด๋ฆญํ•˜์„ธ์š”
  • "NUnit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ"๋ฅผ ์„ ํƒํ•˜๊ณ  "๋‹ค์Œ"์„ ํด๋ฆญํ•˜์„ธ์š”.
  • ์†”๋ฃจ์…˜์˜ ์ด๋ฆ„๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ  "๋งŒ๋“ค๊ธฐ"๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

Linux์˜ C#์—์„œ Selenium ํ…Œ์ŠคํŠธ

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ์–ดํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ NuGet ํŒจํ‚ค์ง€๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • "ํ”„๋กœ์ ํŠธ" ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•˜์—ฌ "NuGet ํŒจํ‚ค์ง€ ์ถ”๊ฐ€"๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
  • Selenium.WebDriver ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•˜์„ธ์š”.
  • Selenium.WebDriver.ChromeDriver ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•„์„œ ์„ค์น˜ํ•˜์„ธ์š”.

Linux์˜ C#์—์„œ Selenium ํ…Œ์ŠคํŠธ

๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ Test.cs์— ๋Œ€ํ•œ ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์—ฌ๊ธฐ์— ๋‹ค์Œ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

using NUnit.Framework;
using System;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium;

namespace SeleniumTests
{
    [TestFixture()]
    public class Test
    {
        [Test()]
        public void TestCase()
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("http://habr.com/");
            Assert.IsTrue(driver.Url.Contains("habr.com"), "ะงั‚ะพ-ั‚ะพ ะฝะต ั‚ะฐะบ =(");
            driver.Quit();
        }
    }
}

ํ…Œ์ŠคํŠธ๋Š” "Unit Tests" ํƒญ์—์„œ ์‹œ์ž‘๋˜๋ฉฐ, ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด "View" ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•˜์—ฌ "Test"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

Linux์˜ C#์—์„œ Selenium ํ…Œ์ŠคํŠธ

์„ฑ๊ณต์ ์ธ ์ž๋™ํ™” =)

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€