1. 程式人生 > >Webdriver UI自動化測試 實現自動登入

Webdriver UI自動化測試 實現自動登入

自動化測試實施過程中,有測試需求:第一個用例時登入用例,只要登入成功,後面的用例就不需要重複登入。隨機想到了每次請求目標網站,攜帶上次登入成功後服務端返回的cookie,來實現繞過登入:

保持cookie的工具類:

package ec.qa.autotest.ui.utility;

import org.openqa.selenium.Cookie;

/**
 * @author xin.wang
 * 儲存登入後返回的COOKIE
 */

public class CookiesUtil {
	
	private static Cookie ck = null;

	public static Cookie getCk() {
		return ck;
	}

	public static void setCk(Cookie ck) {
		CookiesUtil.ck = ck;
	}
}

登入用例(需要在用例集中第一個執行):
	@Test(groups = { "login" }, invocationCount = 1)
	public void loginSupplierPortal() throws InterruptedException {
		indexPage.clickLoginLink();
		loginPage.loginPortal(info);
		Assert.assertEquals(loginSuccessPage.getEmailInfo(), email);
		CookiesUtil.setCk(WebDriverUtil.getWebDriverInstance().manage().getCookieNamed("_s_u_i_d"));
		System.out.println("======驗證資訊:" + loginSuccessPage.getEmailInfo() + "===========");
	}
}

在其他測試用用例的@BeforeMethod加入如下程式碼:(最好定義一個測試基類。所有用例都繼承此基類)
if (CookiesUtil.getCk() != null) {
			webDriver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS);
			try {
				webDriver.get(website);
			} catch (Exception e) {
			}
			webDriver.manage().addCookie(CookiesUtil.getCk());
		}
		try {
			webDriver.get(website);
		} catch (Exception e) {
		}
		webDriver.manage().timeouts().pageLoadTimeout(-1, TimeUnit.SECONDS);
	}

testng配置檔案配置依賴登入用例:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="EC_UI_Auto_TestSuite" verbose="3">
	<!-- <listeners>
		<listener class-name="ec.qa.autotest.ui.testng.listener.TestngRetryListener" />
	</listeners> -->
	<test name="SupplierPortalTest" preserve-order="true">
		<groups>
			<dependencies>
				<group name="LoginPageCase" depends-on="login" />
			</dependencies>
		</groups>
		<classes>

			<class name="ec.qa.autotest.ui.supplier.portal.testcases.IndexPageCase" />
		
			<class name="ec.qa.autotest.ui.supplier.portal.testcases.ProductPageCase" />

		</classes>
	</test>
</suite>

執行測試用例集,只要登入用例執行成功,後面的用例會自動登入到登入後的頁面.