Sayfa Nesne Modeli'nde tüm sınıfların tek bir sürücü örneğini paylaşması gerekir mi?
Bir BaseTest.java dosyası oluşturabilir ve Genel statik WebDriver sürücüsünü bildirebilirim; içinde. Daha sonra tüm sınıflar aynı sürücü referansını genişletebilir ve kullanabilir.
Daha sonra tüm test sınıflarım aynı örneği kullanabilir.
Kullanabilirmiyim:
driver = new ChromeDriver();
Her test yönteminde veya Salatalık senaryosunda. Kafam karıştı, sürücü nasıl kullanılır. Sürücü bir krom pencere oturumu mu?
Yanıtlar
Sürücü bir krom pencere oturumu mu?
Hayır. ChromeDriver, yerel olarak çalışan bir Chrome tarayıcısını kontrol etmekten çok bir sunucuyu temsil eder. Sunucu, tarayıcının başlatma, öldürme ve kontrol etme eylemleri gibi yaşam döngüsünü kontrol edecektir.
Daha fazla ayrıntı için dokümanlara bakın
Sürücü oluşturabilir miyim = new ChromeDriver (); her test yönteminde veya Salatalık senaryosunda
Evet, ancak bağlamınıza bağlı olacaktır. Bazı işlemlerde bağımsız olarak çalışan birden çok tarayıcının olmasını istiyorsanız, yeni bir sürücü oluşturabilirsiniz.
Bonus:
Bir BaseTest.java dosyası oluşturabilir ve Genel statik WebDriver sürücüsünü bildirebilirim; içinde. Daha sonra tüm sınıflar aynı sürücü referansını genişletebilir ve kullanabilir.
Bu tehlikeli olabilir. Kalıtım, yapabileceğiniz en güçlü eşleştirme biçimidir ve küresel bir değişkene sahip olmak, davranışlarda anlaşılması çok zor bir değişikliğe neden olabilir. Sürücü örneklerinin Sayfa Nesnelerinize enjekte edilmesi için kodunuzu yeniden düzenlemek isteyebilirsiniz . Bu şekilde Sayfa Nesnelerini bir global değişkene bağlamazsınız ve Sürücü için bir çift test enjekte ederek bunlar için kolayca birim testleri oluşturabilirsiniz .
Chromedriver nedir:
chromedriver, tarayıcıyla etkileşim kurabilen bir koda sahiptir. Bu komutlar bir API aracılığıyla açığa çıkarılır (Bu, chromedriver'ın localhost'ta başlatıldığını gördüğünüz şeydir: 14563). Koddan, chrome sürücüsüne bir şeyler yapmasını söylemek için bu api uç noktalarına erişiyoruz.
Örneğin elem.click () dediğinizde selenium API ile konuşur ve chromedriver'a tarayıcıda belirtilen elem'i tıklamasını söyler. Ve Chrome sürücüsü bunu yapar ve tarayıcıdan yanıt verir ve kodu dışarıya verir

Neden temel sınıfa ihtiyacımız var
Bu, sürücü oturumlarının farklı sınıflar arasında aktarılmasını sağlamak içindir. Aksi takdirde böyle bir şey yapamayacaksın
page1.sendpassword()
page1.sendusername()
page1.submit()
page2.adduser()
Çünkü sayfa1 ve sayfa2 için farklı sürücü oturumunuz varsa,
ardından page2.adduser () chrome sürücüsünü başlattıktan sonra yeni başlatılacak ve önceki oturum açma oturumlarınız kullanılamayacak, bu yüzden tekrar oturum açmanız gerekecek
Ayrıca, raporlama için dinleyici sınıflarına ekran görüntüleri veya sürücüye özgü eylemler ekleyemezsiniz.
Temel sınıf hakkında daha fazla bilgiyi şu adreste okuyabilirsiniz:
POM çerçevesinde genel bir statik WebDriver nesnesi bildiren bir BaseTest sınıfı oluşturmanın amacı nedir?
Kodunuzdaki WebDriver örneği, tek bir web sürücüsü uygulaması oturumuyla etkileşimde bulunmak için kullandığınız bir tür kanaldır. Temel olarak kodunuzda kullandığınız şey, istemci bağlama olarak adlandırılır .
WebDriver, bir taraftaki istemci bağlantılarınıza (örneğin Java kitaplıkları) doğru REST API'yi açığa çıkaran ve diğer taraftaki tarayıcıyı kontrol edebilen bir HTTP sunucusudur.
Dolayısıyla, aynı Chrome oturumunda çalıştığı varsayılan tüm kodunuz (çerezleri korumak, vb.) Aynı web sürücüsü örneğini paylaşmalıdır.
Kodunuzda bir dalgıç daha somutlaştırmanızı hiçbir şey durduramaz. Bu yeni örnek aracılığıyla, farklı bir paralel izole tarayıcı oturumunun kontrolünü elde edeceksiniz.