LocalStorage içindeki bir değişkene ulaşmak için Selenium WebDriver JS olarak çalıştırılır. JS kodu ile LocalStorage değişkenlerine ulaşılabilir.
Tarayıcı Ekran Görüntüsü Alma
Tarayıcıda açık olan sayfanın ekran görüntüsü almak için TakeScreenshot() kullanılır. SaveAsFile("path") metoduna resmin kaydedileceği yol verilir.
Sayfa Link Değiştirildiğinde Oluşan “OpenQA.Selenium.StaleElementReferenceException" Hatası
Örnekte belirtilen durum yapıldığında aşağıdaki 2 hata alınmaktadır.
OpenQA.Selenium.StaleElementReferenceException : stale element reference: element is not attached to the page document
OpenQA.Selenium.StaleElementReferenceException : The element reference of is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
Örnek:
A sayfamız üzerinde bulunan linkler Selenium WebDriver ile okunarak bir değişkende tutuldu.
Linklerden birine tıklanarak B sayfasına gidilir, burada işlemler yapılır.
Daha sonra tekrar A sayfasına gidilerek 1. Adımda tutulan değişkenlerde işlem yapılmaya çalışıldığında “OpenQA.Selenium.StaleElementReferenceException” hatası alınmaktadır.
Farklı sayfalar arasında geçiş yapılıyor ise elementler değişkende tutulmamalı! Sayfa üzerinde işlem yapılacağı zaman Selenium WebDriver ile elementlere erişilerek işlem yapılmalıdır.
Link Değişmeyen Durumlarda Navigate().Back() Sorunu
Link’e tıklandığında mevcut sayfaya gidiyor ise Driver().Navigate().Back() yapıldığında browser’ın default sayfasına gider.Örnek:
Tarayıcı açılır ve adres çubuğuna www.foo.com yazılır.
Anasayfa da bulunan logo'ya tıklanır ve bu logo bizi tekrar www.foo.com adresine götürür.
Selenium WebDriver Navigate Back yapıldığında www.foo.com linkine gitmesi beklenir. Ancak (link değişmediği için) browser’ın default sayfasına(örnek: google.com) gider!
Örnekteki durum selenium kod yazımında sorunlara sebep olabileceğinden link’in değişmediği durumlar için dikkat edilmelidir.
Driver’da Hata Oluştuğunda ExceptionThrown Tetiklenmesi
Driver üzerinde işlem yapılırken(findElement vb.) hata oluştuğunda ExceptionThrown tetiklenmesi sağlanır. Bunun için Driver EventFiringWebDriver’dan new’lenir.
NUnit Test Sonucu Hata Kontrolü
NUnit test sonucu TestContext.CurrentContext.Result.Outcome.Statusile öğrenilebilir.
Örnekte TearDown içerisinde test sonucu fail ise ekran görüntüsü aldırılmaktadır.
DropDown Seçme
DropDown seçme işlemlerinde text değerinden seçildiğinde hata alınabilmektedir. Yapılan testlerde value değerinden seçme yapıldı.
var element = Driver.SwitchTo().Frame(Driver.FindElements(By.ClassName(HtmlElementNames.Fixed_frame))[0]);
element.FindElements(By.TagName(HtmlElementNames.A))[0].Click();
//tarayıcıdaki tab’lar alınır.
var tabs = CurrentDriver.WindowHandles;
//1 numaralı tab’a geçmesi sağlanır.
CurrentDriver.SwitchTo().Window(tabs[1]);
//1 numaralı sekmede işlemler yapılır
//bulunulan sekme(1 numaralı tab) kapatılır
CurrentDriver.Close();
//0 numaralı tab’a geçmesi sağlanır.
CurrentDriver.SwitchTo().Window(tabs[0]);
var js = (IJavaScriptExecutor)CurrentDriver;
//getItem içerisine localStorage key ismi yazılır. Bu key’e ait değer string olarak alınır.
var cookieLocalStorageElement = (string)js.ExecuteScript("return localStorage.getItem('cookieCT')");
var firingDriver = new EventFiringWebDriver(CurrentDriver);
//Hata oluştuğunda ThrowsTakeScreenshot metoduna gider.
firingDriver.ExceptionThrown += ThrowsTakeScreenshot;
CurrentDriver = firingDriver;
[TearDown]
public void ThrowScreenshot()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
var timestamp = DateTime.Now.ToString("yyyy-MM-dd-hhmm-ss");
var uiTestExceptionsPath = $"{Directory.GetCurrentDirectory()}{BrowserOptionNames.UiTestExceptions}";
var SaveAsFileImagePath = $"{uiTestExceptionsPath}\\{timestamp}.png";
var exists = Directory.Exists(uiTestExceptionsPath);
if (!exists)
{
Directory.CreateDirectory(uiTestExceptionsPath);
}
CurrentDriver.TakeScreenshot().SaveAsFile(SaveAsFileImagePath);
}
}