Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/furkan-gulsen/python-selenium-test-islemleri
Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.
https://github.com/furkan-gulsen/python-selenium-test-islemleri
python python-test selenium selenium-python selenium-tests selenium-webdriver selenium-webdriver-python testing testing-tools
Last synced: 4 days ago
JSON representation
Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.
- Host: GitHub
- URL: https://github.com/furkan-gulsen/python-selenium-test-islemleri
- Owner: Furkan-Gulsen
- License: mit
- Created: 2021-12-23T16:14:10.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-27T18:41:30.000Z (about 3 years ago)
- Last Synced: 2023-07-09T11:26:51.500Z (over 1 year ago)
- Topics: python, python-test, selenium, selenium-python, selenium-tests, selenium-webdriver, selenium-webdriver-python, testing, testing-tools
- Language: Python
- Homepage:
- Size: 13.1 MB
- Stars: 8
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.
---
# LinkedIn Gönderi Paylaşma Testi
YouTube Videosu: https://www.youtube.com/watch?v=FFwsQForJC4
Selenium, linkedin.com adresine giriş yaparak sayfanın doğru görüntülenip
görüntülenmediğini kontrol ediyor.```python
# Web sayfasının ChromeDrive ile açılması
self.driver.get("https://www.linkedin.com")
# Doğru URL'ye sahip sitenin yüklenip yüklenmediğini test etme
self.assertLessEqual(self.driver.title, "Log In or Sign Up")
```Giriş sayfası açıldıktan sonra, sayfa üzerine email input alanı olup olmadığı kontrol ediliyor.
Daha sonra verilen email değeri input alanı içerisine yazılıyor.```python
email_elem = self.driver.find_element(By.ID, 'session_key')
# Email input alanı erişilebilir mi kontrol et
self.assertTrue(email_elem.is_enabled())
# Email input alanını doldurma
email_elem.send_keys(self.email)
```
Giriş sayfası açıldıktan sonra, sayfa üzerine parola input alanı olup olmadığı kontrol ediliyor.
Daha sonra verilen parola değeri input alanı içerisine yazılıyor.```python
password_elem = self.driver.find_element(By.ID, 'session_password')
# Password input alanı erişilebilir mi kontrol et
self.assertTrue(password_elem.is_enabled())
# Şifre input alanını doldurma
password_elem.send_keys(self.password)
```Giriş sayfası üzerinde bulunan iki input alanı doldurulduktan sonra “GİRİŞ YAP” butonuna
erişilip erişilmediği test ediliyor. Daha sonrasında input alanları dolu ise butona tıklanıyor.```python
login_button = self.driver.find_element(By.CSS_SELECTOR,
'.sign-in-form__submit-button')
# Giriş butonu görünür mü ve tıklanılabilir mi kontrol et
self.assertTrue(login_button.is_displayed())
self.assertTrue(login_button.is_enabled())
# Giriş butonuna tıklanılır
login_button.click()
```Giriş başarılı olduktan sonra LinkedIn’in anasayfa’ya yönlendirilecektir. Ana sayfanın doğru
görüntülüp görünütlenmediği kontrol ediliyor.```python
home_page = self.driver.find_element(By.ID,"voyager-feed")
# ana sayfa açıldı mı kontrol et
self.assertTrue(home_page.is_displayed())
```Anasayfa içerisinde yer alan, gönderi paylaşmak için, butona görüntülenip görüntülenmediği
ve daha sonrasında erişilip erişilmediği kontrol ediliyor. Eğer bir sorun yoksa butona
tıklanıyor.```python
add_post_button =
self.driver.find_element(By.CSS_SELECTOR,'.artdeco-button.artdeco-button
--muted.artdeco-button--4.artdeco-button--tertiary.ember-view.share-box-
feed-entry__trigger')
# Gönderi paylaşma butonu görünür mü ve tıklanılabilir mi kontrol et
self.assertTrue(add_post_button.is_displayed())
self.assertTrue(add_post_button.is_enabled())
add_post_button.click();
```Butona basıldıktan sonra LinkedIn sayfasında gönderi paylaşmak için içerisinde bir input
alanı ve bir buton bulunan modal açılıyor. Modal’ın erişilip erişilmediği kontrol edildikten
sonra belirlenen paylaşım metni input içerisine yazılıyor.```python
# post paylaşma
time.sleep( 2 )
self.postText = self.postText + str(random.randint( 0 , 100000 ))
post_text_area =
self.driver.find_element(By.CSS_SELECTOR,".ql-editor.ql-blank")
# editör alanı erişilebilir mi kontrol et
self.assertTrue(post_text_area.is_enabled())
# post yazısını editöre yazma işlemi
post_text_area.send_keys(self.postText)
```Modal içerisinde yer alan butona görüntülenip görüntülenmediği ve daha sonrasında erişilip
erişilmediği kontrol ediliyor. Eğer bir sorun yoksa butona tıklanıyor ve gönderi paylaşılıyor.```python
time.sleep( 2 )
post_send_button =
self.driver.find_element(By.CSS_SELECTOR,'.share-actions__primary-action
.artdeco-button.artdeco-button--2.artdeco-button--primary.ember-view')
# Gönderi paylaşma butonu görünür mü ve tıklanılabilir mi kontrol et
self.assertTrue(post_send_button.is_displayed())
self.assertTrue(post_send_button.is_enabled())
post_send_button.click();
```Gönderi paylaş butonuna basıldıktan sonra modal kapanıyor. Daha sonra gönderinin
paylaşılıp paylaşılmadığı, ilgili gönderinin içerisindeki yazı kontrol edilerek sağlanıyor.```python
# post paylaşımını kontrol etme
time.sleep( 2 )
post_content_div =
self.driver.find_element(By.CSS_SELECTOR,'.break-words>span')
self.assertTrue(post_content_div.is_displayed())
self.assertEqual(self.postText, post_content_div.text)
time.sleep( 3 )
```
---# Amazonda Bulunan İlk Ürün ile Aranan Kitap Karşılaştırma Testi
Kullanılacak tarayıcı için gerekli dosya yolu tanımlanıyor ve açılıyor, sonrasında Url’si
tanımlanan web sitesine gidiliyor ve tarayıcı tam ekran yapılıyor.```python
# Firefox tarayıcısı için gerekli geckodriver aranıyor
cls.driver =
webdriver.Firefox(executable_path="/Users\Yunus\Desktop\Test
dersi/geckodriver")
cls.driver.implicitly_wait( 30 )
# Amazon sayfasının url'si tanımlanıyor
cls.driver.get("https://www.amazon.com.tr/")
# Tarayıcı tam ekran olacak şekilde büyütülüyor
cls.driver.maximize_window()
```Selenium, amazon.com.tr adresine giriş yaparak sayfanın doğru görüntülenip
görüntülemediğini kontrol ediyor ve verilen değeri input alanı içerisine yazılıyor.```python
first_book_title = "Şeker Portakalı"
input_alan =self.driver.find_element(By.XPATH,"//input[@id='twotabsearchtextbox']")
# Arama input alanı erişilebilir mi kontrol et
self.assertTrue(input_alan.is_enabled())
# Arama kutusuna tıkla ve 'Kitap İsmi' gir
self.driver.find_element(By.XPATH,"//input[@id='twotabsearchtextbox']").
send_keys(first_book_title)
# Aramayı başlat
self.driver.find_element(By.XPATH,"//input[@id='twotabsearchtextbox']").
submit()
```Ürün listeleme sayfasının yüklenmesi için 3 saniye bekleniliyor ve açıldıktan sonra sayfa
üzerindeki ilk ürüne tıklanıyor.```python
# Çıkan ilk ürüne tıklanıyor
time.sleep( 3 )
self.driver.find_element(By.XPATH,"(//div[@class='sg-col-inner']//img[co
ntains(@data-image-latency,'s-product-image')])[1]").click()
```Girilen ilk ürün ile aradığımız kitabın başlığı, yazarı, dili ve sayfa sayısı aynı mı teker teker
kontrol ediliyor. Her kontrol sonunda 3 saniye bekleniyor ve işlem onay bilgisi yazdırılıyor.```python
# Çıkan ilk ürüne tıklıyorum
time.sleep( 3 )
self.driver.find_element(By.XPATH,"(//div[@class='sg-col-inner']//img[co
ntains(@data-image-latency,'s-product-image')])[1]").click()# Ürünün başlığı kontrol
time.sleep( 3 )
title =
self.driver.find_element(By.XPATH,'//*[@id="productTitle"]').text.strip(
)
self.assertEqual(first_book_title,title)
print("Title done")# Ürünün yazarı kontrol
time.sleep( 3 )
author =
self.driver.find_element(By.XPATH,'//*[@id="bylineInfo"]/span[1]/a').tex
t.strip()
self.assertEqual(author, "Jose Mauro De Vasconcelos")
print("Author done")# Ürünün dili kontrol
time.sleep( 3 )
language = self.driver.find_element(By.XPATH,
'//*[@id="detailBullets_feature_div"]/ul/li[2]/span/span[2]').text.strip
()
self.assertEqual(language,"Türkçe")
print("Language done")# Ürünün sayfa sayısı kontrol
time.sleep( 3 )
pages =
self.driver.find_element(By.XPATH,'//*[@id="detailBullets_feature_div"]/
ul/li[3]/span/span[2]').text.strip()
pages = pages[: 3 ]
self.assertEqual(pages,"184")
print("Pages done")
```Web siteden çekilen veriler başlıkları ile yazdırılıyor.
```python
print("Pages = " , pages)
print("Title = ", title)
print("Author = ", author)
print("Language = ", language)
```Tüm işlemle bittiğinde tarayıcı kapatılıyor.
```python
# Tarayıcı Kapatılıyor
cls.driver.quit()
```---
# Çiçek Sepeti Test
Çiçek Sepeti’ nde 4 farklı test gerçekleştirdim.
Bunlar;
● Sisteme giriş yapması
● Sepete ürün eklemesi
● Sepete eklenen aynı iki ürünün fiyatını kontrol etmeSelenium ile Chrome directory oluşturarak Çiçek Sepeti sayfasına giriş sayfasının
görüntülenmesi kontrol edilir.```python
s = Service('directory/chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.maximize_window()
url = 'https://www.ciceksepeti.com'
browser.get(url)def sign (self):
self.browser.get("https://www.ciceksepeti.com/uye-girisi")
time.sleep( 1 )
```Email input alanı ve şifre input alanı görünürlüğü test edilir, email ve şifre girilmesi gereken
input alanlarına yazılır ve giriş yapılır.```python
userName = self.browser.find_element_by_name("Email")
userName.send_keys(email)
#email input alanı kontrol
``````python
emailInput = self.browser.find_element(By.ID, "EmailLogin")
self.assertTrue(emailInput.is_enabled())
time.sleep( 2 )
userPassword = self.browser.find_element_by_id("Password")
#password input alanı kontrol
passwordInput = self.browser.find_element(By.ID, "Password")
self.assertTrue(passwordInput.is_enabled())userPassword.send_keys(password)
time.sleep( 2 )
userPassword.send_keys(Keys.ENTER)
time.sleep( 1 )
```Giriş başarılı olarak gerçekleştikten sonra anasayfanın görünürlüğü kontrol edilir.
```python
main_page = self.driver.browser.find_element(By.CLASS_NAME, "header__top")
self.assertTrue(main_page.is_displayed())
```Arama alanında bulunan input alanına ürün adı girilerek ara butonuna tıklanır.
```python
# aranacak ürün
product = "pembe lilyum çiçek buketi"def searchProduct (self):
search = self.browser.find_element(By.CLASS_NAME,"product-search__input")
search.send_keys(product)
self.browser.find_element(By.CLASS_NAME, "icon-search-444").click()
time.sleep( 2 )
```Açılan sayfada çıkan ürün aranan ürün ile adı aynı mı kontrol edilir ve ürün detay sayfası
açılır.```python
self.browser.find_element(By.XPATH,
"/html/body/main/div/div[4]/div[4]/div/div/a/div[1]/img").click()
name = self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[2]/div/div[1]/h
/span").text.strip()
self.assertEqual("Pembe Lilyum Çiçek Buketi", name)
print("Product name success")
time.sleep( 2 )
```Açılan detay sayfada teslimat tarih seçim butonları çalışıyor mu kontrol ediliyor ve teslimat
tarih detayları seçimi yapılıyor.```python
self.browser.find_element(By.CLASS_NAME, "js-emoji-characters").click()
time.sleep( 1 )
self.browser.find_element(By.CLASS_NAME,
"js-region-self-service").click()
time.sleep( 2 )
self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[5]/div[2]
/div[1]/span[1]").click()
time.sleep( 2 )
self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/d
iv/div/div[1]/input").click()
time.sleep( 2 )
self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/d
iv/div/div[2]/div/div[1]/p").click()
time.sleep( 2 )
```Sepete ekleme butonu görünürlüğü kontrol ediliyor ve sipariş ver butonuna tıklanıyor.
```python
#buton görünürlülüğü ve işlevselliği kontrol edilir
self.assertTrue(button.is_displayed())
self.assertTrue(button.is_enabled())
buy_product = self.browser.find_element(By.CLASS_NAME,
"js-add-to-cart").click()
```Aynı üründen farklı tarihlerde teslimat için iki tane sepete eklenebilir mi kontrol edilir.
```python
self.browser.back()
self.browser.find_element(By.CLASS_NAME, "js-emoji-characters").click()
time.sleep( 1 )
self.browser.find_element(By.CLASS_NAME,
"js-region-self-service").click()
time.sleep( 2 )
productPrice = self.browser.find_element(By.CLASS_NAME,
"js-price-integer").text
print("price: ", productPrice)
```Ürünü sepete iki defa eklendiğinde sepette bulunan fiyatın doğruluğu kontrol edilir.
```python
#ürün fiyatı string den int türüne çevrilir
intPrice = int(productPrice)#sepete eklenecek aynı iki ürünün toplam fiyatı
tekliurunikiuruncarpimi = intPrice* 2print("sepete eklenecek aynı iki ürünün toplam fiyatı",
tekliurunikiuruncarpimi)#sepete eklencek iki ürünün toplam fiyatının string e çevrilir
stringtekliurunikiuruncarpimi = str(tekliurunikiuruncarpimi)self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[5]/div[2]/
div[1]/span[1]").click()
time.sleep( 2 )
self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/di
v/div/div[1]/input").click()
time.sleep( 2 )
self.browser.find_element(By.XPATH,
"//*[@id='productDetailSend']/div/div/div[2]/div[2]/div[4]/div[13]/div/di
v/div/div[2]/div/div[1]/p").click()
time.sleep( 2 )
self.browser.find_element(By.CLASS_NAME, "js-add-to-cart").click()
time.sleep( 3 )
self.browser.find_element(By.CLASS_NAME, "agree-button").click()
time.sleep( 2 )#sepetteki toplam fiyat
totalPrice = self.browser.find_element(By.CLASS_NAME,
"grand-total-integer").text
print("total price", totalPrice)#sepetteki toplam fiyatın string e çevrilir
strtotalPrice = str(totalPrice)
time.sleep( 2 )
self.assertEqual(stringtekliurunikiuruncarpimi, strtotalPrice)
print("price successed"
```Tarayıcı kapatılır.
```python
self.browser.close()
```