Selenium drop-down seçimi

Eğer web teknolojileri üzerine geliştirme yapıyor iseniz Selenium'u mutlaka duymuşşunuz. Kısaca selenium browser üzerinde test otomasyonu yapmaya yarayan bir firefox eklentisidir. İyi kullanıldığında etkili sonuçlar verir. Ücretsiz, farklı browserlarda da kullanılması, bol miktarda bilgi birikimi (dokümantayon, web sayfası ve blog) olması ve farklı dillerde test caseleri yazmaya olanak sağlaması ise avantajlarıdır. 

Selenium'da script dilini Python seçildiğinde oto kayıt drop-down menüsünden bir seçenek seçildiğinde çoğu zaman alltaki gibi Select fonksiyonu içerisinde web objelerinde arayacağı fonksiyonu yazar ve görülebilen secenekler üzerinde arama yapar.

Select(driver.find_element_by_id("id_promotion")).select_by_visible_text("OPTION")

Fakat bu satırı çalıştırdığınızda aşağıdaki gibi bir Select komutunun tanımlanmadığı ile ilgili bir hata ile karşılaşırsınız:

NameError: global name 'Select' is not defined
File "D:\automation\test\admin\run.py", line 11, in <module>
  testObject.voucherAdd(5)
File "D:\automation\test\admin\test_case_imps.py", line 48, in voucherAdd
  Select(driver.find_element_by_id("id_promotion")).select_by_visible_text("Free of Charge")

Bu hatadan kurtulmak için Selenium IDE'nin önerdiği dışında bir yapı kullanılabilir. Örneğin Python dilinde drop-down menü içeriği bir liste olarak alınır ve liste içerisinde kullanılmak istenen seçenerek aratılır. Bulunduğunda ise ilgili seçeneğe tıklanırak drop-down menüden seçim tamamlanmış olur. Bu sayede bir döngü içerisinde bir birine bağlı listeler kontrol edilebilir.



Örneğin yukarıda görüntüsü verilen sayfanın otomasyonu yapılmak istenildiğinde, ilgili objenin yerini bulmak için kullanılabilecek en iyi yollardan birisi Xpath adresinden objeye ulaşmaktır. Soldaki gibi secenekleri olan bir menünün sağdaki görüntüsünde görüldüğü gibi mouse ile sağ klik yapıldığında verilen seceneklerden Xpath adresi kolaylıkla bulunabilir. Otomasyon scripti  aşağıdaki gibi olabilir. 

#options değişkenine menüdeki seçenekleri ata
options = driver.find_element_by_xpath('//*[@id="id_promotion"]').find_elements_by_tag_name('option')
for option in options:
    #seçenekleri listele
    print option.text
   
    #option4 with ... "none" seçeneğini seç
    if option.text == 'option4 with ... "none"':
        option.click()
        #kontrol: doğru seçenek getirilmiş mi?
        print "\n\n  sonuc: \'%s\' secenegi getirildi" %option.text
       
        break




Comments

Popular posts from this blog

Selenium Error "Element is not currently interactable and may not be manipulated"

Change Default Timeout and Wait Time of Capybara

Performance Testing on CI: Locust is running on Jenkins

Selenium Chromedriver Error Message: u'unknown error: unable to discover open pages

Getting the text of elements in Espresso