Webdriver UI自動化測試 實現自動登入
阿新 • • 發佈:2019-01-25
自動化測試實施過程中,有測試需求:第一個用例時登入用例,只要登入成功,後面的用例就不需要重複登入。隨機想到了每次請求目標網站,攜帶上次登入成功後服務端返回的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>
執行測試用例集,只要登入用例執行成功,後面的用例會自動登入到登入後的頁面.