{"id":24906302,"url":"https://github.com/furkan-gulsen/python-selenium-test-islemleri","last_synced_at":"2025-10-16T18:30:46.253Z","repository":{"id":45120313,"uuid":"441233363","full_name":"Furkan-Gulsen/python-selenium-test-islemleri","owner":"Furkan-Gulsen","description":"Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.","archived":false,"fork":false,"pushed_at":"2022-01-27T18:41:30.000Z","size":13697,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-07-09T11:26:51.500Z","etag":null,"topics":["python","python-test","selenium","selenium-python","selenium-tests","selenium-webdriver","selenium-webdriver-python","testing","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Furkan-Gulsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-23T16:14:10.000Z","updated_at":"2023-07-09T11:26:51.501Z","dependencies_parsed_at":"2022-09-02T22:33:48.588Z","dependency_job_id":null,"html_url":"https://github.com/Furkan-Gulsen/python-selenium-test-islemleri","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Furkan-Gulsen%2Fpython-selenium-test-islemleri","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Furkan-Gulsen%2Fpython-selenium-test-islemleri/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Furkan-Gulsen%2Fpython-selenium-test-islemleri/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Furkan-Gulsen%2Fpython-selenium-test-islemleri/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Furkan-Gulsen","download_url":"https://codeload.github.com/Furkan-Gulsen/python-selenium-test-islemleri/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236738656,"owners_count":19196962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","python-test","selenium","selenium-python","selenium-tests","selenium-webdriver","selenium-webdriver-python","testing","testing-tools"],"created_at":"2025-02-02T00:39:24.118Z","updated_at":"2025-10-16T18:30:44.104Z","avatar_url":"https://github.com/Furkan-Gulsen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://selenium-python.readthedocs.io/_static/logo.png\" /\u003e\n\u003c/p\u003e\n\n\u003e Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.\n\n---\n\n# LinkedIn Gönderi Paylaşma Testi\n\nYouTube Videosu: https://www.youtube.com/watch?v=FFwsQForJC4\n\nSelenium, linkedin.com adresine giriş yaparak sayfanın doğru görüntülenip\ngörüntülenmediğini kontrol ediyor.\n\n```python\n# Web sayfasının ChromeDrive ile açılması\nself.driver.get(\"https://www.linkedin.com\")\n# Doğru URL'ye sahip sitenin yüklenip yüklenmediğini test etme\nself.assertLessEqual(self.driver.title, \"Log In or Sign Up\")\n```\n\nGiriş sayfası açıldıktan sonra, sayfa üzerine email input alanı olup olmadığı kontrol ediliyor.\nDaha sonra verilen email değeri input alanı içerisine yazılıyor.\n\n```python\nemail_elem = self.driver.find_element(By.ID, 'session_key')\n# Email input alanı erişilebilir mi kontrol et\nself.assertTrue(email_elem.is_enabled())\n# Email input alanını doldurma\nemail_elem.send_keys(self.email)\n```\nGiriş sayfası açıldıktan sonra, sayfa üzerine parola input alanı olup olmadığı kontrol ediliyor.\nDaha sonra verilen parola değeri input alanı içerisine yazılıyor.\n\n```python\npassword_elem = self.driver.find_element(By.ID, 'session_password')\n# Password input alanı erişilebilir mi kontrol et\nself.assertTrue(password_elem.is_enabled())\n# Şifre input alanını doldurma\npassword_elem.send_keys(self.password)\n```\n\nGiriş sayfası üzerinde bulunan iki input alanı doldurulduktan sonra “GİRİŞ YAP” butonuna\nerişilip erişilmediği test ediliyor. Daha sonrasında input alanları dolu ise butona tıklanıyor.\n\n```python\nlogin_button = self.driver.find_element(By.CSS_SELECTOR,\n'.sign-in-form__submit-button')\n# Giriş butonu görünür mü ve tıklanılabilir mi kontrol et\nself.assertTrue(login_button.is_displayed())\nself.assertTrue(login_button.is_enabled())\n# Giriş butonuna tıklanılır\nlogin_button.click()\n```\n\nGiriş başarılı olduktan sonra LinkedIn’in anasayfa’ya yönlendirilecektir. Ana sayfanın doğru\ngörüntülüp görünütlenmediği kontrol ediliyor.\n\n```python\nhome_page = self.driver.find_element(By.ID,\"voyager-feed\")\n# ana sayfa açıldı mı kontrol et\nself.assertTrue(home_page.is_displayed())\n```\n\nAnasayfa içerisinde yer alan, gönderi paylaşmak için, butona görüntülenip görüntülenmediği\nve daha sonrasında erişilip erişilmediği kontrol ediliyor. Eğer bir sorun yoksa butona\ntıklanıyor.\n\n```python\nadd_post_button =\nself.driver.find_element(By.CSS_SELECTOR,'.artdeco-button.artdeco-button\n--muted.artdeco-button--4.artdeco-button--tertiary.ember-view.share-box-\nfeed-entry__trigger')\n# Gönderi paylaşma butonu görünür mü ve tıklanılabilir mi kontrol et\nself.assertTrue(add_post_button.is_displayed())\nself.assertTrue(add_post_button.is_enabled())\nadd_post_button.click();\n```\n\nButona basıldıktan sonra LinkedIn sayfasında gönderi paylaşmak için içerisinde bir input\nalanı ve bir buton bulunan modal açılıyor. Modal’ın erişilip erişilmediği kontrol edildikten\nsonra belirlenen paylaşım metni input içerisine yazılıyor.\n\n```python\n# post paylaşma\ntime.sleep( 2 )\nself.postText = self.postText + str(random.randint( 0 , 100000 ))\npost_text_area =\nself.driver.find_element(By.CSS_SELECTOR,\".ql-editor.ql-blank\")\n# editör alanı erişilebilir mi kontrol et\nself.assertTrue(post_text_area.is_enabled())\n# post yazısını editöre yazma işlemi\npost_text_area.send_keys(self.postText)\n```\n\nModal içerisinde yer alan butona görüntülenip görüntülenmediği ve daha sonrasında erişilip\nerişilmediği kontrol ediliyor. Eğer bir sorun yoksa butona tıklanıyor ve gönderi paylaşılıyor.\n\n```python\ntime.sleep( 2 )\npost_send_button =\nself.driver.find_element(By.CSS_SELECTOR,'.share-actions__primary-action\n.artdeco-button.artdeco-button--2.artdeco-button--primary.ember-view')\n# Gönderi paylaşma butonu görünür mü ve tıklanılabilir mi kontrol et\nself.assertTrue(post_send_button.is_displayed())\nself.assertTrue(post_send_button.is_enabled())\npost_send_button.click();\n```\n\nGönderi paylaş butonuna basıldıktan sonra modal kapanıyor. Daha sonra gönderinin\npaylaşılıp paylaşılmadığı, ilgili gönderinin içerisindeki yazı kontrol edilerek sağlanıyor.\n\n```python\n# post paylaşımını kontrol etme\ntime.sleep( 2 )\npost_content_div =\nself.driver.find_element(By.CSS_SELECTOR,'.break-words\u003espan')\nself.assertTrue(post_content_div.is_displayed())\nself.assertEqual(self.postText, post_content_div.text)\ntime.sleep( 3 )\n```\n---\n\n# Amazonda Bulunan İlk Ürün ile Aranan Kitap Karşılaştırma Testi\n\nKullanılacak tarayıcı için gerekli dosya yolu tanımlanıyor ve açılıyor, sonrasında Url’si\ntanımlanan web sitesine gidiliyor ve tarayıcı tam ekran yapılıyor.\n\n```python\n# Firefox tarayıcısı için gerekli geckodriver aranıyor\ncls.driver =\nwebdriver.Firefox(executable_path=\"/Users\\Yunus\\Desktop\\Test\ndersi/geckodriver\")\ncls.driver.implicitly_wait( 30 )\n# Amazon sayfasının url'si tanımlanıyor\ncls.driver.get(\"https://www.amazon.com.tr/\")\n# Tarayıcı tam ekran olacak şekilde büyütülüyor\ncls.driver.maximize_window()\n```\n\nSelenium, amazon.com.tr adresine giriş yaparak sayfanın doğru görüntülenip\ngörüntülemediğini kontrol ediyor ve verilen değeri input alanı içerisine yazılıyor.\n\n```python\nfirst_book_title = \"Şeker Portakalı\"\ninput_alan =\n\nself.driver.find_element(By.XPATH,\"//input[@id='twotabsearchtextbox']\")\n# Arama input alanı erişilebilir mi kontrol et\nself.assertTrue(input_alan.is_enabled())\n# Arama kutusuna tıkla ve 'Kitap İsmi' gir\nself.driver.find_element(By.XPATH,\"//input[@id='twotabsearchtextbox']\").\nsend_keys(first_book_title)\n# Aramayı başlat\nself.driver.find_element(By.XPATH,\"//input[@id='twotabsearchtextbox']\").\nsubmit()\n```\n\nÜrün listeleme sayfasının yüklenmesi için 3 saniye bekleniliyor ve açıldıktan sonra sayfa\nüzerindeki ilk ürüne tıklanıyor.\n\n```python\n# Çıkan ilk ürüne tıklanıyor\ntime.sleep( 3 )\nself.driver.find_element(By.XPATH,\"(//div[@class='sg-col-inner']//img[co\nntains(@data-image-latency,'s-product-image')])[1]\").click()\n```\n\nGirilen ilk ürün ile aradığımız kitabın başlığı, yazarı, dili ve sayfa sayısı aynı mı teker teker\nkontrol ediliyor. Her kontrol sonunda 3 saniye bekleniyor ve işlem onay bilgisi yazdırılıyor.\n\n```python\n# Çıkan ilk ürüne tıklıyorum\ntime.sleep( 3 )\nself.driver.find_element(By.XPATH,\"(//div[@class='sg-col-inner']//img[co\nntains(@data-image-latency,'s-product-image')])[1]\").click()\n\n# Ürünün başlığı kontrol\ntime.sleep( 3 )\ntitle =\nself.driver.find_element(By.XPATH,'//*[@id=\"productTitle\"]').text.strip(\n)\nself.assertEqual(first_book_title,title)\nprint(\"Title done\")\n\n# Ürünün yazarı kontrol\ntime.sleep( 3 )\nauthor =\nself.driver.find_element(By.XPATH,'//*[@id=\"bylineInfo\"]/span[1]/a').tex\nt.strip()\nself.assertEqual(author, \"Jose Mauro De Vasconcelos\")\nprint(\"Author done\")\n\n# Ürünün dili kontrol\ntime.sleep( 3 )\nlanguage = self.driver.find_element(By.XPATH,\n'//*[@id=\"detailBullets_feature_div\"]/ul/li[2]/span/span[2]').text.strip\n()\nself.assertEqual(language,\"Türkçe\")\nprint(\"Language done\")\n\n# Ürünün sayfa sayısı kontrol\ntime.sleep( 3 )\npages =\nself.driver.find_element(By.XPATH,'//*[@id=\"detailBullets_feature_div\"]/\nul/li[3]/span/span[2]').text.strip()\npages = pages[: 3 ]\nself.assertEqual(pages,\"184\")\nprint(\"Pages done\")\n```\n\nWeb siteden çekilen veriler başlıkları ile yazdırılıyor.\n\n```python\nprint(\"Pages = \" , pages)\nprint(\"Title = \", title)\nprint(\"Author = \", author)\nprint(\"Language = \", language)\n```\n\nTüm işlemle bittiğinde tarayıcı kapatılıyor.\n\n```python\n# Tarayıcı Kapatılıyor\ncls.driver.quit()\n```\n\n---\n\n# Çiçek Sepeti Test\n\nÇiçek Sepeti’ nde 4 farklı test gerçekleştirdim.\nBunlar;\n● Sisteme giriş yapması\n● Sepete ürün eklemesi\n● Sepete eklenen aynı iki ürünün fiyatını kontrol etme\n\nSelenium ile Chrome directory oluşturarak Çiçek Sepeti sayfasına giriş sayfasının\ngörüntülenmesi kontrol edilir.\n\n```python\ns = Service('directory/chromedriver.exe')\nbrowser = webdriver.Chrome(service=s)\nbrowser.maximize_window()\nurl = 'https://www.ciceksepeti.com'\nbrowser.get(url)\n\ndef sign (self):\nself.browser.get(\"https://www.ciceksepeti.com/uye-girisi\")\ntime.sleep( 1 )\n```\n\nEmail input alanı ve şifre input alanı görünürlüğü test edilir, email ve şifre girilmesi gereken\ninput alanlarına yazılır ve giriş yapılır.\n\n```python\nuserName = self.browser.find_element_by_name(\"Email\")\nuserName.send_keys(email)\n#email input alanı kontrol\n```\n\n```python\nemailInput = self.browser.find_element(By.ID, \"EmailLogin\")\nself.assertTrue(emailInput.is_enabled())\ntime.sleep( 2 )\nuserPassword = self.browser.find_element_by_id(\"Password\")\n#password input alanı kontrol\npasswordInput = self.browser.find_element(By.ID, \"Password\")\nself.assertTrue(passwordInput.is_enabled())\n\nuserPassword.send_keys(password)\ntime.sleep( 2 )\nuserPassword.send_keys(Keys.ENTER)\ntime.sleep( 1 )\n```\n\nGiriş başarılı olarak gerçekleştikten sonra anasayfanın görünürlüğü kontrol edilir.\n\n```python\nmain_page = self.driver.browser.find_element(By.CLASS_NAME, \"header__top\")\nself.assertTrue(main_page.is_displayed())\n```\n\nArama alanında bulunan input alanına ürün adı girilerek ara butonuna tıklanır.\n\n```python\n# aranacak ürün\nproduct = \"pembe lilyum çiçek buketi\"\n\ndef searchProduct (self):\nsearch = self.browser.find_element(By.CLASS_NAME,\"product-search__input\")\nsearch.send_keys(product)\nself.browser.find_element(By.CLASS_NAME, \"icon-search-444\").click()\ntime.sleep( 2 )\n```\n\nAçılan sayfada çıkan ürün aranan ürün ile adı aynı mı kontrol edilir ve ürün detay sayfası\naçılır.\n\n```python\nself.browser.find_element(By.XPATH,\n\"/html/body/main/div/div[4]/div[4]/div/div/a/div[1]/img\").click()\nname = self.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[2]/div/div[1]/h\n/span\").text.strip()\nself.assertEqual(\"Pembe Lilyum Çiçek Buketi\", name)\nprint(\"Product name success\")\ntime.sleep( 2 )\n```\n\nAçılan detay sayfada teslimat tarih seçim butonları çalışıyor mu kontrol ediliyor ve teslimat\ntarih detayları seçimi yapılıyor.\n\n```python\nself.browser.find_element(By.CLASS_NAME, \"js-emoji-characters\").click()\ntime.sleep( 1 )\nself.browser.find_element(By.CLASS_NAME,\n\"js-region-self-service\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[5]/div[2]\n/div[1]/span[1]\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/d\niv/div/div[1]/input\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/d\niv/div/div[2]/div/div[1]/p\").click()\ntime.sleep( 2 )\n```\n\nSepete ekleme butonu görünürlüğü kontrol ediliyor ve sipariş ver butonuna tıklanıyor.\n\n```python\n#buton görünürlülüğü ve işlevselliği kontrol edilir\nself.assertTrue(button.is_displayed())\nself.assertTrue(button.is_enabled())\nbuy_product = self.browser.find_element(By.CLASS_NAME,\n\"js-add-to-cart\").click()\n```\n\nAynı üründen farklı tarihlerde teslimat için iki tane sepete eklenebilir mi kontrol edilir.\n\n```python\nself.browser.back()\nself.browser.find_element(By.CLASS_NAME, \"js-emoji-characters\").click()\ntime.sleep( 1 )\nself.browser.find_element(By.CLASS_NAME,\n\"js-region-self-service\").click()\ntime.sleep( 2 )\nproductPrice = self.browser.find_element(By.CLASS_NAME,\n\"js-price-integer\").text\nprint(\"price: \", productPrice)\n```\n\nÜrünü sepete iki defa eklendiğinde sepette bulunan fiyatın doğruluğu kontrol edilir.\n\n```python\n#ürün fiyatı string den int türüne çevrilir\nintPrice = int(productPrice)\n\n#sepete eklenecek aynı iki ürünün toplam fiyatı\ntekliurunikiuruncarpimi = intPrice* 2\n\nprint(\"sepete eklenecek aynı iki ürünün toplam fiyatı\",\ntekliurunikiuruncarpimi)\n\n#sepete eklencek iki ürünün toplam fiyatının string e çevrilir\nstringtekliurunikiuruncarpimi = str(tekliurunikiuruncarpimi)\n\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[5]/div[2]/\ndiv[1]/span[1]\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/di\nv/div/div[1]/input\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.XPATH,\n\"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/di\nv/div/div[2]/div/div[1]/p\").click()\ntime.sleep( 2 )\nself.browser.find_element(By.CLASS_NAME, \"js-add-to-cart\").click()\ntime.sleep( 3 )\nself.browser.find_element(By.CLASS_NAME, \"agree-button\").click()\ntime.sleep( 2 )\n\n#sepetteki toplam fiyat\ntotalPrice = self.browser.find_element(By.CLASS_NAME,\n\"grand-total-integer\").text\nprint(\"total price\", totalPrice)\n\n#sepetteki toplam fiyatın string e çevrilir\nstrtotalPrice = str(totalPrice)\ntime.sleep( 2 )\nself.assertEqual(stringtekliurunikiuruncarpimi, strtotalPrice)\nprint(\"price successed\"\n```\n\nTarayıcı kapatılır.\n\n```python\nself.browser.close()\n```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffurkan-gulsen%2Fpython-selenium-test-islemleri","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffurkan-gulsen%2Fpython-selenium-test-islemleri","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffurkan-gulsen%2Fpython-selenium-test-islemleri/lists"}