我在Page Object Model和TestNG框架中使用PageFactory进行自动化。我在beforeFindBy
中使用WebDriverEventListener
方法来侦听元素的存在。当元素不存在时,抛出NoSuchElementException
并使用try-catch
块捕获异常。如何停止执行@Test方法中的剩余步骤。我不想在@Test方法中使用try-catch
。我们非常感谢任何关于我的设计变化的建议。以下是我的设计。
LoginPage
public class LoginPage {
@FindBy(xpath = "//img[@src='/webres_5786257bd7c8a5.72130757/themes/default/images/login/logo.png']")
WebElement loginLogo;
public LoginPage(WebDriver driver, ExtentTest test) {
this.driver = driver;
PageFactory.initElements(driver, this);
this.test = test;
}
public void verifyLoginPageLogo() throws IOException {
Assert.assertTrue(loginLogo.isDisplayed());
test.log(LogStatus.PASS, "Logo is displayed", takeScreenshot(driver, test));
}
}
Listenter
public class CustomListeners extends TestListenerAdapter implements WebDriverEventListener {
//All Implemented Methods
public void beforeFindBy(By by, WebElement element, WebDriver driver) {
try {
driver.findElement(by);
} catch (NoSuchElementException e) {
System.out.println("Element " + by + "not found");
}
}
}
测试类
@Listeners(CustomListeners.class)
public class Test1 extends BaseTestSuite {
LoginPage lp;
TabMenu tm;
@Test(priority = 0, testName = "Verify Login")
public void login() throws Exception {
lp = new LoginPage(driver, test);
tm = new TabMenu(driver, test);
driver.get(Constants.url);
lp.verifyLoginPageLogo(); //Element not present here
lp.setUserName("dmin");
lp.setPassword("admin");
lp.clickLoginBtn();
tm.verifyTabMenu();
tm.isCurrentTab("Dashboard");
}
}
答案 0 :(得分:1)
登录<label for="input">Value</label><br>
<input type="number" id="input"><br>
<button id="btnSubmit" onclick="submit()">Submit</button>
<p id="p1">0</p>
<p id="p2">0</p>
<p id="p3">0</p>
理想情况下不应包含断言代码。该代码应该在您的测试类中。此外,PageObject
功能也应该在测试类中,而不是Extent
。
不需要PageObject
或testng listener
。在PageObject中,如果将verifyLoginPageLogo()方法重构为下面的 -
webdrivereventlistener
在测试课中这样做 -
public boolean isLoginPageLogoDisplayed() throws IOException {
//Write logic to check if element is displayed.
//Return false in case of exception etc
}
如果抛出Assert.assertTrue(lp.isLoginPageLogoDisplayed());
,则会自动跳过剩余的步骤。
还要看一下创建一个ArrertionError
,它有实用的方法来检查存在,显示,查找元素等等。只需扩展它。