{"id":2240,"date":"2023-08-22T17:42:12","date_gmt":"2023-08-22T17:42:12","guid":{"rendered":"https:\/\/gizemevkuran.com\/?p=2240"},"modified":"2023-08-22T17:42:16","modified_gmt":"2023-08-22T17:42:16","slug":"selenium-webdriver-sik-karsilasilan-hatalar","status":"publish","type":"post","link":"https:\/\/gizemevkuran.com\/?p=2240","title":{"rendered":"Selenium WebDriver S\u0131k Kar\u015f\u0131la\u015f\u0131lan Hatalar"},"content":{"rendered":"\n<p>Bu yaz\u0131mda Selenium Web Driver\u2019da s\u0131kl\u0131kla kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z exceptionlara yer vermek istiyorum. Bir web sayfas\u0131 \u00fczerinde otomasyon ger\u00e7ekle\u015ftirdi\u011fimiz i\u00e7in \u00e7o\u011fu zaman sayfada elementi bulamama, bir form i\u00e7inde a\u00e7\u0131lan bir elementin g\u00f6r\u00fcnmemesi, yetersiz bekleme s\u00fcresi gibi sebeplerle exception olu\u015fabilmektedir.<\/p>\n\n\n\n<p><strong>Selenium\u2019da en s\u0131k kar\u015f\u0131la\u015f\u0131lan hatalar:<\/strong><\/p>\n\n\n\n<p>ElementNotVisibleException: Selenium Web sayfas\u0131nda g\u00f6r\u00fcn\u00fcr olmayan bir elementi bulmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda kar\u015f\u0131la\u015f\u0131lan bir exception t\u00fcr\u00fcd\u00fcr.<\/p>\n\n\n\n<p>NoAlertPresentException: Olmayan bir uyar\u0131\/pop-up \u015feklindeki diyalog \u00fczerinde i\u015flem yap\u0131lmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda kar\u015f\u0131la\u015f\u0131l\u0131r.<\/p>\n\n\n\n<p>NoSuchWindowException: Yeni bir pencereye ge\u00e7meye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda al\u0131nan exception t\u00fcr\u00fcd\u00fcr.<\/p>\n\n\n\n<p>NoSuchElementException: Sayfada bulunmayan bir elemente eri\u015fim sa\u011flanmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda kar\u015f\u0131la\u015f\u0131l\u0131r.<\/p>\n\n\n\n<p>WebDriverException: Herhangi bir kod blo\u011fu Selenium Web Driver\u2019\u0131 \u00e7al\u0131\u015ft\u0131ramad\u0131\u011f\u0131nda olu\u015fan exception t\u00fcr\u00fcd\u00fcr.<\/p>\n\n\n\n<p>Bu exception\u2019lar\u0131n sebeplerinden ve bu exception\u2019lar\u0131 almamak i\u00e7in uygulayabilece\u011fimiz methotlardan bahsetmek istiyorum.<\/p>\n\n\n\n<p>1) org.openqa.selenium.ElementNotVisibleException<\/p>\n\n\n\n<p>ElementNotVisibleException s\u0131n\u0131f\u0131 ElementNotInteractableException s\u0131n\u0131f\u0131n\u0131n bir alt s\u0131n\u0131f\u0131d\u0131r. Bu exception, WebDriver etkile\u015fime giremeyen g\u00f6r\u00fcnmez bir web elementi \u00fczerinde bir i\u015flem ger\u00e7ekle\u015ftirmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda at\u0131l\u0131r. Yani web elementi gizli bir durumdad\u0131r. \u00d6rne\u011fin, bir sayfa i\u00e7erisindeki bir butona tam y\u00fcklenmeden t\u0131klatmaya \u00e7al\u0131\u015f\u0131lan durumlar. Bu noktada ElementNotVisibleException almamak amac\u0131yla \u00e7\u00f6z\u00fcm yollar\u0131ndan biri olarak \u2018wait\u2019 komutunu kullanabiliriz.<\/p>\n\n\n\n<p>try {<\/p>\n\n\n\n<p>WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));<\/p>\n\n\n\n<p>wait.Until(ExpectedConditions.visibilityOfElementLocated(By.id(\u201dlogin\u201d));<\/p>\n\n\n\n<p>try {<\/p>\n\n\n\n<p>driver.findElement(By.id(\u201clogin\u201d)).click();<\/p>\n\n\n\n<p>} catch (WebDriverException e) {<\/p>\n\n\n\n<p>System.out.println(\u201cExceptional case\u201d);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>} catch (TimeOutException e)<\/p>\n\n\n\n<p>System.out.println(\u201cWebDriver couldn\u2019t find this element visible\u201d);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Yukar\u0131daki kod blo\u011fu \u00f6rne\u011finde wait komutu sayesinde \u2018login\u2019 id de\u011ferine sahip bir giri\u015f butonunun y\u00fcklenmesine zaman vermek ad\u0131na 10 saniyelik bir bekleme s\u00fcresi verilmi\u015ftir.<\/p>\n\n\n\n<p>2) org.openqa.selenium.NoAlertPresentException<\/p>\n\n\n\n<p>NoAlertPresentException s\u0131n\u0131f\u0131 NotFoundException s\u0131n\u0131f\u0131n\u0131n bir alt s\u0131n\u0131f\u0131d\u0131r. Bir alert \u00fczerinde i\u015flem yap\u0131lmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda ilgili alert sayfada olu\u015fmad\u0131ysa bu exception olu\u015fur. \u00d6rnek verecek olursak bir kayd\u0131 silmek istide\u011finizde \u2018Bu kayd\u0131 silmek istedi\u011finize emin misiniz?\u2019 uyar\u0131s\u0131 \u00e7\u0131kt\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnelim, bu uyar\u0131da bulunan \u2018evet\u2019 butonuna basmak istiyorsak ve bu exception\u2019\u0131 al\u0131yorsak \u00f6ncelikle silme butonuna t\u0131klad\u0131\u011f\u0131ndan emin olmam\u0131z gerekiyor.<\/p>\n\n\n\n<p>3) org.openqa.selenium.NoSuchWindowException<\/p>\n\n\n\n<p>Selenium NoSuchWindowException ayn\u0131 zamanda NoSuchFrameException\u2019a benzer. Bazen uygulamalarda herhangi bir ba\u011flant\u0131ya veya d\u00fc\u011fmeye t\u0131klad\u0131\u011f\u0131n\u0131zda a\u00e7\u0131lan alt pencereler (yani ayr\u0131 pencereler) olacakt\u0131r. Normalde, alt pencereleri otomatikle\u015ftirmek istiyorsan\u0131z, o pencereye ge\u00e7meniz gerekir, o zaman yaln\u0131zca o pencerede bulunan \u00f6\u011felerle etkile\u015fime girebilirsiniz. Bunun \u00fcstesinden gelmek i\u00e7in, \u201cdriver.getWindowHandles ()\u201d ad\u0131 verilen webdriver y\u00f6ntemlerinden birini kullanarak a\u00e7\u0131lan pencereleri i\u015flememiz gerekir. Bu bilgilere sahip oldu\u011funuzda, pencereyi otomatikle\u015ftirmek veya pencereyle etkile\u015fim kurmak i\u00e7in ilgili pencereye ge\u00e7ebilirsiniz.<\/p>\n\n\n\n<p>String windowID = driver.getWindowHandle();<\/p>\n\n\n\n<p>driver.switchTo().window(windowID);<\/p>\n\n\n\n<p>Yukar\u0131daki kod blo\u011funu kullanarak ge\u00e7mek istedi\u011fimiz pencerenin id de\u011feri ile pencereler aras\u0131 ge\u00e7i\u015f yaparak i\u015flemlere devam edebiliriz.<\/p>\n\n\n\n<p>4) org.openqa.selenium.NoSuchElementException<\/p>\n\n\n\n<p>ElementNotVisibleException ile benzer \u015fekilde bu exception\u2019da da konumland\u0131r\u0131c\u0131 ile tan\u0131mlanm\u0131\u015f elementin sayfada bulunamamas\u0131 durumunda bu hata olu\u015fur. Bu sorunu i\u00e7in kullanabilece\u011fimiz \u00e7e\u015fitli \u00e7\u00f6z\u00fcmler vard\u0131r.<\/p>\n\n\n\n<p>Sayfan\u0131n tamamen y\u00fcklenmesini beklemek.<\/p>\n\n\n\n<p>driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);<\/p>\n\n\n\n<p>Sayfan\u0131n a\u015fa\u011f\u0131s\u0131nda yada yukar\u0131s\u0131nda kalan elementler i\u00e7in scroll kullanmak.<\/p>\n\n\n\n<p>public void scrollDown(){<\/p>\n\n\n\n<p>JavascriptExecutor js = (JavascriptExecutor) driver;<\/p>\n\n\n\n<p>js.executeScript(\u201cwindow.scrollBy(0,250)\u201d, \u201c\u201d);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Element g\u00f6r\u00fcn\u00fcr olana kadar beklemek.<\/p>\n\n\n\n<p>public WebElement waitUntilElementVisible(WebDriver driver, WebElement element, int delay) {<\/p>\n\n\n\n<p>try{<\/p>\n\n\n\n<p>WebDriverWait wait = new WebDriverWait(driver, delay);<\/p>\n\n\n\n<p>return wait.until(ExpectedConditions.visibilityOf(element));<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>catch (NoSuchElementException e){<\/p>\n\n\n\n<p>throw new RuntimeException(\u201cWeb element not visible within given time\u201d + element +\u201d Time \u201c+ delay);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Verilen belirli bir s\u00fcre kadar bekletmek.<\/p>\n\n\n\n<p>Thread.sleep(2000);<\/p>\n\n\n\n<p>2 saniye kadar bekleme s\u00fcresi.<\/p>\n\n\n\n<p>5) org.openqa.selenium.WebDriverException<\/p>\n\n\n\n<p>Web driver\u2019\u0131n ba\u015flamas\u0131na engel olacak bir sorun oldu\u011funda bu exception olu\u015fur. Kodda bulunan ba\u011f\u0131ml\u0131l\u0131klar, etkile\u015fimler kontrol edilmelidir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda Selenium Web Driver\u2019da s\u0131kl\u0131kla kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z exceptionlara yer vermek istiyorum. Bir web sayfas\u0131 \u00fczerinde otomasyon ger\u00e7ekle\u015ftirdi\u011fimiz i\u00e7in \u00e7o\u011fu zaman sayfada elementi bulamama, bir form i\u00e7inde a\u00e7\u0131lan bir elementin g\u00f6r\u00fcnmemesi, yetersiz bekleme s\u00fcresi gibi sebeplerle exception olu\u015fabilmektedir. Selenium\u2019da en s\u0131k kar\u015f\u0131la\u015f\u0131lan hatalar: ElementNotVisibleException: Selenium Web sayfas\u0131nda g\u00f6r\u00fcn\u00fcr olmayan bir elementi bulmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda kar\u015f\u0131la\u015f\u0131lan bir exception<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[27],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/posts\/2240"}],"collection":[{"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2240"}],"version-history":[{"count":1,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/posts\/2240\/revisions"}],"predecessor-version":[{"id":2241,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=\/wp\/v2\/posts\/2240\/revisions\/2241"}],"wp:attachment":[{"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gizemevkuran.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}