2016-11-16 86 views
0

我已經創建了2個獨立的類來測試網頁。但是,不幸的是,當我將它們都添加到testing.xml中時,其中只有一個執行,另一個不執行。甚至在將XML設置爲preserve-order =「true」parallel =「false」後,瀏覽器也會並行打開。我很困惑,我在哪裏做錯了。第二類testing.xml不執行

這是我的XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite" preserve-order="true" parallel="false"> 
    <test name="Test"> 
    <classes> 
     <class name="TestServiceNow.loginOne"/> 
     <class name="TestServiceNow.loginTwo"/> 
    </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 

loginOne如下:

package TestServiceNow; 
import org.testng.annotations.Test; 
import ServiceNow.login; 
public class loginOne extends loginTest{ 
    @Test 
    public void test_Login(){ 
    //Create Login Page object 
    objLogin = new login(driver); 
    //login to application 
    objLogin.loginGurukula("admin", "admin"); 
    } 
} 

loginTwo如下:

import org.testng.annotations.Test; 
import ServiceNow.login; 
public class loginTwo extends loginTest{ 
    @Test 
     public void test_Login_Fail(){ 
      //Create Login Page object 
      objLogin = new login(driver); 
      //login to application 
      objLogin.loginGurukula("admin", "admin1"); 
    } 
} 

的基類是如下:

public class登錄測試DesiredCapabilities capabilities = DesiredCapabilities.chrome(); File file = new File(「C:/Users/gattu_000/Documents/selenium-java-3.0.0-beta2/chromedriver_win32/chromedriver.exe」); WebDriver驅動程序; login objLogin;

@BeforeClass 
public void a() { 
    driver = new ChromeDriver(capabilities); 
    capabilities.setCapability("marionette", true); 
    System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
    System.out.println("Before class called"); 
} 
@BeforeTest 
public void setup(){ 
    System.out.println("Before test called"); 
    driver.get("http://localhost:8080/#/login"); 
} 
@AfterTest 
public void close() { 
    System.out.println("After test called"); 
} 

@AfterClass 
public void b() { 
    System.out.println("After class called"); 
    driver.close(); 
} 

結果看起來像 enter image description here

編輯 enter image description here

回答

0

你被兩個loginOne和loginTwo延長loginTest後。但在loginTest中,您初始化了您的驅動程序。這就是爲什麼兩個瀏覽器開放。爲了解決這個問題,你可以使用像@BeforeTest或@BeforeSuite這樣的設置方法來初始化驅動程序。作爲一個例子,這裏有一個代碼片段 -

@BeforeSuite 
public void a() { 
    driver = new ChromeDriver(capabilities); 
    System.out.println("Before suite called"); 
} 

除了初始化部分之外,像往常一樣去做其他事情。

編輯

我錯過了什麼。您正在使用後測方法關閉您的驅動程序。要正確運行您的測試,請從您的測試後方法中刪除driver.close(),並將其放置在以後的套件部分。

+0

嗨,我試過了你提到的方式。這次只打開一個窗口,但第二個類不運行。我已經在錯誤截圖的問題中更新了我的代碼。 –

+0

查看編輯答案。 –

+0

我想你的意思是「AfterSuite」部分是driver.close()進入的地方。那也行不通。 –

0

的XML應該是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite" preserve-order="true"> 
    <test name="Test"> 
    <classes> 
     <class name="TestServiceNow.loginOne"/> 
    </classes> 
    </test> <!-- Test --> 
    <test name="Test1"> 
    <classes> 
     <class name="TestServiceNow.loginTwo"/> 
    </classes> 
    </test> 
</suite> <!-- Suite --> 

要兩次啓動瀏覽器,我們需要有2次獨立的測試。 (可能,這可能是許多解決方案之一)

0
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="Selenium Test Suite"> 
<test name="Selenium Test Suite"> 
<classes> 
<class name="packagename.classname1"/> 
<class name="packagename.classname1"/> 
</classes> 
</test> 
</suite> 

which is proper. if you getting null point don't use driver in all the class. because of that only you are getting null pointer i guess. 
相關問題