2016-03-24 13 views
0

Karşıya bakıyorum "FirefoxDriver, quit() çağrıldıktan sonra kullanılamaz" sorunu .Lütfen yardım .quit() çağrısı yaptıktan sonra sürücüyü başlatmış olmama rağmen yine de aşağıdakileri alıyorum FirefoxDriver, quit() çağrıldıktan sonra kullanılamıyor

Çerçevemde, WebDriver sürücü değişkenini statik olarak kullandım. Her bir test kutusunun sonunda, driver.quit() yöntemini çalıştırdım. Bir sonraki testin başlangıcında, sürücü değişkenini yeni firefoxdriver örneği ile tekrar güncelledim(). Ancak, herhangi bir webelement bulmak için sürücü değişkenini kullanmaya çalışırsam, sürücü değişkeni null. İşte kodumun basitleştirilmiş bir versiyonu. Konsolu

public class Frame 
{ 
    private static WebDriver driver; 

    public static WebDriver openUrl(String URL) 
    { 
     driver = new FirefoxDriver(); 
     driver.get(URL); 
     return driver; 
    } 

    public static WebDriver returnWebDriverInstance() 
    { 
     System.out.println("I am called"); 
     return driver; 
    } 
} 

public class javaCheck2 
{ 
    private static WebDriver driver = Frame.returnWebDriverInstance(); 

    static 
    { 
     // driver = Frame.returnWebDriverInstance(); 
     System.out.println(driver + " in static"); 
    } 

    public static void pageMaxim() 
    { 
     System.out.println(driver + " in page maxim"); 
     driver.manage().window().maximize(); 
    } 

    public static void pagesource() 
    { 
     System.out.println(driver + " in page source"); 
     driver.getPageSource(); 
    } 
} 

@Test 
public class TestCase1 
{ 
    public void TC01() 
    { 
     WebDriver driver = Frame.openUrl("https://www.google.com"); 
     javaCheck2.pagesource(); 
     driver.quit(); 

     // driver.close(); 
    } 
} 

@Test 
public class TestCase2 
{ 
    public void TC02() 
    { 
     WebDriver driver = Frame.openUrl("https://www.gmail.com"); 
     javaCheck2.pageMaxim(); 
     driver.quit(); 
     // driver.close(); 
    } 
} 

Çıktı:

I am called 
FirefoxDriver: firefox on MAC (6df8103b-673f-954f-b20d-72fa4b9181b8) in static 
FirefoxDriver: firefox on MAC (6df8103b-673f-954f-b20d-72fa4b9181b8) in page source 
FirefoxDriver: firefox on MAC (null) in page maxim 

=============================================== 

Suite 

Total tests run: 2, Failures: 1, Skips: 0 

=============================================== 

+0

. Kodun daha okunaklı bir şeye yeniden kodlanmasının sorunun çözüleceğinden% 99 eminim (bu 2 basit test, ama bunun yarısını çözmek için biraz zaman aldı). "Global" bir sürücü değişkeniniz varsa, yöntemlerde de yerel kopyalar oluşturmanıza gerek yoktur; diğer taraftan, emin olmak istiyorsanız, yerelDriver veya driver2 veya başka bir şey gibi başka bir şey arayın. – skandigraun

+0

Frame sınıfında statik WebDriver sürücüsü private.So Bu özel statikin bir kopyasını, sınıfın dışından sürücü üyesi değişkenine doğrudan erişemediğim yöntemlerde almam gerekir. – Coder

cevap

0

sorun yardım edin javaCheck2 'in statik driver örneği şekilde, (statik init bloğunda) bir kez set ve reset asla olmasıdır Yakında quit() numaralı telefonu çağırdığınızda temel Session (null değil) geçersiz olur. Asla hiçbir zaman sıfırlanmaz, bu yüzden sürücü örneğini tekrar kullanmaya çalıştığınız anda bir hata alırsınız.

basit bir düzeltmedir bu (büyük Refactor olmadan) işe gitmek için: Tam olarak, ama bazı kapsam gizleme sorunu olduğunu düşünüyorum emin değil

public class javaCheck2 { 
    public static void pageMaxim() { 
     Frame.returnWebDriverInstance().manage().window().maximize(); 
    } 

    public static void pagesource() { 
     Frame.returnWebDriverInstance().getPageSource(); 
    } 
} 
+0

TestCase2 sınıfında quit() öğesini çağırdıktan sonra, verilen komutu yürütüyorum. WebDriver driver = Çerçeve.openUrl ("https://www.gmail.com"); Bu nedenle, çerçeve sınıfındaki statik sürücü değişkeni yeni bir örneğe sahiptir. Ancak JavaCheck2'deki sürücü değişkeni, aşağıdaki komut kodda yalnızca bir kez yürütüldüğünden tekrar başlatılmaz. özel statik WebDriver sürücüsü = Çerçeve.returnWebDriverInstance(); – Coder

+1

TestCase2 sınıfında quit() öğesini çağırdıktan sonra, verilen komutu yürütüyorum. WebDriver driver = Çerçeve.openUrl ("https://www.gmail.com"); Bu nedenle, çerçeve sınıfındaki statik sürücü değişkeni yeni bir örneğe sahiptir. Ancak JavaCheck2'deki sürücü değişkeni, aşağıdaki komut kodda yalnızca bir kez yürütüldüğünden tekrar başlatılmaz. özel statik WebDriver sürücüsü = Çerçeve.returnWebDriverInstance(); // TC02'nin yürütülmesi sırasında yürütülmez. bu yüzden javaCheck2 sürücüsünden sürücü hala eski oturuma atıfta bulunuyor. Açıklamakta olduğunuz şey budur, değil mi? – Coder

+0

Bunu kontrol etmek için birkaç kez okudum, ama evet, bu doğru. Refactor istiyorsanız, mümkün olduğunca fazla statik malzemeyi kaldırmanızı öneririz. –

İlgili konular