1-) C# RMOS - Selenium firefox ile
private static string GetDefaultFirefoxProfileLocation()
{
string profilesDir = $@"{Environment.ExpandEnvironmentVariables("%appdata%")}\Mozilla\Firefox\Profiles";
return Directory.GetDirectories(profilesDir).First(dir => dir.EndsWith(".default"));
}
1-) C# RMOS - Selenium.WebDriver ve Selenium.Firefox.WebDriver-> NuGet'den indir kur.
2-) Linke girmek ve bir buttona tıklamak için
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using System.Threading;
using System.Collections.ObjectModel;
namespace Selenium1
{
public partial class Form1 : Form
{
// ders videosu https://www.youtube.com/watch?v=877WZUanTxs
// ders videosu 2 https://www.youtube.com/watch?v=WbnemkSfYbI
// html'deki istenilen alana sağtık kopyala xPATH diyerek kolayca xPath' ini alabilirsin
string link = @"https://www.n11.com/";
public Form1()
{
InitializeComponent();
}
private void btnSepeteEkle_Click(object sender, System.EventArgs e)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(link); // n11 sitesine git
driver.FindElement(By.ClassName("btnSignIn")).Click(); // className'i btnSignIn olanı bul ve ona click yap
driver.FindElement(By.Id("email")).SendKeys("rambo.haber.deneme@gmail.com"); // SenKeys ile textbox alanlarına doldurma yapılır
driver.FindElement(By.Id("password")).SendKeys("deneme123");
driver.FindElement(By.Id("loginButton")).Click(); // id'si loginButton olanı bul ve ona click yap
driver.FindElement(By.Id("searchData")).SendKeys("samsung");
driver.FindElement(By.ClassName("searchBtn")).Click();
// driver.FindElement(By.XPath(".//*[@id='contentListing']/div/div/div[2]/div[3]/a[2]")).Click(); // id'si contentListing olanın içine gir sonra /div dediği bir alt dive gir /div[2] dediği altındaki 2. dive gir demek. a[2] dediği 2 inci a etiketine gir demek yani tıkla demek.
driver.FindElement(By.XPath(".//*[@class='pagination']/a[2]")).Click(); // class'ı pagination olan etiketin içindeki a[2] etiketine gir yani tıkla demek. sayfa 2 ye geçmek için bunu yazdım.
Thread.Sleep(2000); //
driver.FindElement(By.XPath(".//*[@id='p-264647096']/div[1]/a")).Click(); // id'si p-264647096 olan etiketin içindeki 1 inci dive gir ve onun içindeki 1 inci a etiketine tıkla demek.
Thread.Sleep(2000); // sayfanın yüklenmesi biraz geç sürebilir o yüzden 2 sn bekledikten sonra sepete ekle yaptım
driver.FindElement(By.ClassName("btnAddBasket")).Click();
}
private void btnUrunListele_Click(object sender, System.EventArgs e)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(link); // n11 sitesine git
driver.FindElement(By.ClassName("btnSignIn")).Click(); // className'i btnSignIn olanı bul ve ona click yap
driver.FindElement(By.Id("email")).SendKeys("rambo.haber.deneme@gmail.com"); // SenKeys ile textbox alanlarına doldurma yapılır
driver.FindElement(By.Id("password")).SendKeys("deneme123");
driver.FindElement(By.Id("loginButton")).Click(); // id'si loginButton olanı bul ve ona click yap
driver.FindElement(By.Id("searchData")).SendKeys("samsung");
driver.FindElement(By.ClassName("searchBtn")).Click();
ReadOnlyCollection<IWebElement> element = driver.FindElements(By.XPath("/html/body/div[1]/div/div/div/div[2]/section/div[2]/ul/li/div/div[1]/a")); // html'nin sağtık kopyala xpath'ini aldıkdan sonra düzenledim. ul'nin içindeki li'lerin hepsini al ve içindeki div in içindeki div[1]'in a' larını al demek. NOT : div dersen o yerdeki tüm div'leri alır ama div[2] dersen sadece 2 inci div'i alır
for (int i = 0; i < element.Count; i++)
{
listBox1.Items.Add(i + "-) " + element[i].Text);
}
}
}
}
/********************************DÜZENLENMİŞ HALİ*********************************************/
1-) C# RMOS - SAYFA YÜKLENDİKTEN SONRA YANİ İSTENİLEN İD'Yİ BULUNCAYA KADAR 10 SN BEKLEMEK İÇİN
WebDriverExtensions.cs
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System;
using System.Windows.Forms;
namespace Selenium1
{
public static class WebDriverExtensions
{
public static void FindElementClick(this IWebDriver driver, By by, int timeoutInSeconds) // istediğim id'yi 10 sn boyunca sayfa yükleninceye kadar bekle demek
{
try
{
if (timeoutInSeconds > 0)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)).Until(drv => drv.FindElement(by));
}
driver.FindElement(by).Click();
}
catch (Exception ex)
{
MessageBox.Show("ID Bulunamadı. ***" + by.ToString() + "*** " + ex.Message);
}
}
public static void FindElementSendKeys(this IWebDriver driver, By by, int timeoutInSeconds, string deger) // istediğim id'yi 10 sn boyunca sayfa yükleninceye kadar bekle demek
{
try
{
if (timeoutInSeconds > 0)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)).Until(drv => drv.FindElement(by));
}
driver.FindElement(by).SendKeys(deger);
}
catch (Exception ex)
{
MessageBox.Show("ID Bulunamadı. ***" + by.ToString() + "*** " + ex.Message);
}
}
}
}
2-) N11 SİTESİNE LOGİN OLMA VE İSTENİLEN ÜRÜNÜN İD Sİ İLE SEPETE EKLEME VEYA TÜM ÜRÜNLERİN LİSTESİNİ ALMA
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using System.Collections.ObjectModel;
namespace Selenium1
{
public partial class Form1 : Form
{
string link = @"https://www.n11.com/";
public Form1()
{
InitializeComponent();
}
private void btnSepeteEkle_Click(object sender, System.EventArgs e)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(link);
WebDriverExtensions.FindElementClick(driver, By.ClassName("btnSignIn"),10);
driver.FindElement(By.Id("email")).SendKeys("rambo.haber.deneme@gmail.com");
driver.FindElement(By.Id("password")).SendKeys("deneme123");
driver.FindElement(By.Id("loginButton")).Click();
WebDriverExtensions.FindElementSendKeys(driver, By.Id("searchData"),10, "samsung");
WebDriverExtensions.FindElementClick(driver, By.ClassName("searchBtn"), 10);
WebDriverExtensions.FindElementClick(driver, By.XPath("//*[@class='pagination']/a[2]"), 10); // 10 sn boyunca buluncaya kadar bekle
WebDriverExtensions.FindElementClick(driver, By.XPath("//*[@id='p-253275059']/div[1]/a"), 10);
WebDriverExtensions.FindElementClick(driver, By.XPath("//*[@id='701219377']/option[3]"), 10);
WebDriverExtensions.FindElementClick(driver, By.ClassName("btnAddBasket"), 10);
driver.Quit();
}
private void btnUrunListele_Click(object sender, System.EventArgs e)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl(link); // n11 sitesine git
driver.FindElement(By.ClassName("btnSignIn")).Click(); // className'i btnSignIn olanı bul ve ona click yap
driver.FindElement(By.Id("email")).SendKeys("rambo.haber.deneme@gmail.com"); // SenKeys ile textbox alanlarına doldurma yapılır
driver.FindElement(By.Id("password")).SendKeys("deneme123");
driver.FindElement(By.Id("loginButton")).Click(); // id'si loginButton olanı bul ve ona click yap
driver.FindElement(By.Id("searchData")).SendKeys("samsung");
driver.FindElement(By.ClassName("searchBtn")).Click();
ReadOnlyCollection<IWebElement> element = driver.FindElements(By.XPath("/html/body/div[1]/div/div/div/div[2]/section/div[2]/ul/li/div/div[1]/a")); // html'nin sağtık kopyala xpath'ini aldıkdan sonra düzenledim. ul'nin içindeki li'lerin hepsini al ve içindeki div in içindeki div[1]'in a' larını al demek. NOT : div dersen o yerdeki tüm div'leri alır ama div[2] dersen sadece 2 inci div'i alır
for (int i = 0; i < element.Count; i++)
{
listBox1.Items.Add(i + "-) " + element[i].Text);
}
driver.Quit();
}
}
}