近在學(xué)習(xí)testNG+selenium+java自動化測試工具,但過程中遇到了如下問題,現(xiàn)在已經(jīng)基本解決,主要是換了一下思路。寫此日志以便日后找出更好的解決方法。
問題:
在執(zhí)行測試過程中要執(zhí)行如下用例:
1.打開網(wǎng)站首頁(如:m.test.com)
2.在首頁的搜索框中輸入某個關(guān)鍵詞,如:鞋子
3.檢查打開的鞋子商品列表顯示的數(shù)據(jù)列表是否為每頁10條。
以上這個步驟僅僅是眾多用例中的一個,但是對于第一步的這個動作則是眾多測試用例中都要首先進行操作的步驟。我想要把這個步驟獨立出來,做成一個方法,讓這個方法可以返回當(dāng)前打開的網(wǎng)頁的WebDriver于是我想到了testNG中的dataProvider但是經(jīng)過N次的測試,此方法都不可以返回WebDriver這種對象類型。
為什么要將這個打開網(wǎng)站的方法參數(shù)化:
1.因為多數(shù)用例都要使用這個步驟
2.如果重新定義一個WebDriver,則會重新在新的WebDriver中找頁面對象,但是頁面對象卻存在于第一次打開的頁面中。
原本的代碼如下:
@DataProvider(name="driver")
public static WebDriver BaseTest(){
WebDriver driver=new FirefoxDriver();
driver.get("http://m.test.com");
return driver;
}
然后在需要這個webdriver的地方進行調(diào)用如下:
@Test(dataprovider="driver")
public openpage(WebDriver driver){
//省略}
語法上沒有問題,但是總是會報錯,大意如:dataprovider只能返回如Object[][]類型的對象。
調(diào)了兩天還是不行(由于初學(xué),實在是笨)
后的解決方法是,在另一個類中寫一個方法,每次要用到這個driver時去調(diào)用這個方法,這個類中包含眾多方法(如獲取隨機數(shù),查找某個頁面對象…………)后的代碼如下:
public static FirefoxDriver OpenWap(String url){
FirefoxDriver driver=new FirefoxDriver();
driver.get(url);
return driver;
}
在另一個類中的調(diào)用代碼如下:
private static WebDriver driver;
String url="http://m.vancl.com/user/switch/1";
driver=Utils.OpenWap(url);
于是整個調(diào)試順利通過。整體的調(diào)用代碼如下:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
import org.testng.internal.thread.TestNGThread;
import web.Util.Utils;
public class ProductList {
private static WebDriver driver;
//打開wap站首頁
@Test
public void SearchWordClick() throws InterruptedException {
String url="http://m.vancl.com/user/switch/1";
driver=Utils.OpenWap(url);
int i = Utils.getRandom(3);
// 搜索關(guān)鍵詞的xpath string
String KeyWordString = "//div[@class='nav']/a[" + i + "]";
WebElement KeywordLink = Utils.getElement(KeyWordString, driver);
KeywordLink.click();
TestNGThread.sleep(10000);
}
@Test(dependsOnMethods="SearchWordClick")
public void CheckSearchWordList() throws InterruptedException{
/**
* 檢查搜索列表頁是否正確加載
**/
try {
WebElement cntchk = driver.findElement(By
.xpath("//div[@class='searchorder']/a[1]"));
String chkstr = cntchk.getText().trim();
if (chkstr.equals("屬性導(dǎo)航") || chkstr.equals("分類導(dǎo)航")) {
System.out.println("找到了驗證的標(biāo)記:" + chkstr);
System.out.print("已成功加載商品列表頁");
}
} catch (Exception e) {
System.out.println("商品列表頁加載失敗" + e.getMessage());
}
TestNGThread.sleep(3000);
driver.close();
}
}
初學(xué)testNG,一邊翻資料,一邊看API,一邊調(diào)試,一邊百度。真是頭大,但是慢慢來吧,點點積累誰讓咱起步晚呢~~~如果有高手有好的解決方法,還請告知我,非常感激。