java – 以编程方式检查页面状态
发布时间:2020-12-15 02:32:45 所属栏目:Java 来源:网络整理
导读:我一直在为Web应用程序编写Selenium测试,并且在内部服务器错误的情况下,应用程序中似乎存在多个内部服务器错误实例,应用程序显示自定义错误页面,并且向用户显示错误ID以跟踪技术团队的问题,案例用户遇到它. 这使得在Selenium执行期间调试测试失败变得有点费
我一直在为Web应用程序编写Selenium测试,并且在内部服务器错误的情况下,应用程序中似乎存在多个内部服务器错误实例,应用程序显示自定义错误页面,并且向用户显示错误ID以跟踪技术团队的问题,案例用户遇到它.
这使得在Selenium执行期间调试测试失败变得有点费力. public class SelTestCase { protected WebDriver driver; @Before public void startDriver() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); driver.get("http://www.google.com/"); } @After public void closeDriver() { driver.quit(); } } public class GoogleSearchTest extends SelTestCase { @Rule PageChecker pageChecker = new PageChecker(); @Test @CheckPage public void testGoogleSearch() { GoogleHomePage googleHomePage = PageFactory.initElements(driver,GoogleHomePage.class); googleHomePage.searchGoogle("Selenium HQ"); assert driver.getPageSource().contains("seleniumhq") : "Selenium headquarter search failed"; } } SelTestCase类创建WebDriver实例来执行测试,这里是PageChecker类 – public class PageChecker extends SelTestCase { @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface CheckPage { // page check should take place here (Though not sure if it is right place) // like if(driver.getPageSource.contains("Internal Server Error") {throw Exception ("Err")} } } 这就是我所困扰的,我如何进行CheckPage发声? 解决方法
恕我直言,你的问题有两个解决方案.如果只有一小部分测试需要该功能,那么我就不会使用规则.而是向每个测试添加单行errorChecker.checkPage(驱动程序)并在此方法中实现检查.
如果几乎所有测试都需要它: >通过扩展ExternalResource将SelTestCase转换为规则. public class WebDriverRule extends ExternalResource { public WebDriver driver; @Override protected void before() { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); driver.get("http://www.google.com/"); } @Override protected void after() { driver.quit(); } } >通过扩展Verifier将页面检查代码添加到规则中. public class PageChecker extends Verifier { private WebDriverRule webDriverRule; private enabled = true; public PageChecker(WebDriverRule webDriverRule) { this.webDriverRule = webDriverRule; } public void disable() { this.enabled = false; } @Override public void verify() { if(enabled && notValid()) throw new AssertionError("foo"); } private boolean notValid() { WebDriver driver = webDriverRule.driver; //do something with driver } } >使用org.junit.rules.RuleChain控制两个规则的执行顺序. public class GoogleSearchTest { private WebDriverRule webDriverRule = new WebDriverRule(); private PageChecker pageChecker = new PageChecker(webDriverRule); @Rule public RuleChain driverAroundPageChecker = RuleChain.outerRule(webDriverRule).around(pageChecker); @Test public void testGoogleSearch() { GoogleHomePage googleHomePage = PageFactory.initElements(driver,GoogleHomePage.class); googleHomePage.searchGoogle("Selenium HQ"); assert driver.getPageSource().contains("seleniumhq") : "Selenium headquarter search failed"; } @Test public void testWithouPageCheck() { pageChecker.disable(); //here is your real test } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |