每页中的文本检查(Selenium)

Text check in every page (Selenium)

使用 Java,我正在尝试对现有测试访问的 Web 应用程序中每个页面上的特定文本编写一般检查。不必在每一页上单独写它,是否可以在一个较高级别的地方(可能在基础class)做?

public class BaseClassForUiTest {
                public BaseClassForUiTest() {
                       ...
                }

                public void test() throws Exception {
                       boolean isNewPage = checkIfNewPage();
                       if (isNewPage)
                             // perform a text check on the page
                }
}

每个测试都从 BaseClassForUiTest 扩展并覆盖 test() 方法。

至于我,你最好使用 Parameterized or JUnitParams 为这个检查创建一个单独的测试 class 并给它一个指向 运行 的 url 作为参数,但这取决于您 运行ning 测试的常用方法是什么(我们同时 运行 所有测试包,因此在这种情况下它是我们的解决方案)。 这似乎也是逻辑上分离的解决方案

如果您打算将此检查用作断言,您可以为这种情况重写当前代码并在 @Before 块中调用它(但在我看来这仍然不是一个好的解决方案)

Instead of having to write it on each and every page individually, is it possible to do in one place at a high level (may be in the base class)?

是的,可以通过将 WebDriverEventListener 实现到 BaseClassForUiTest 并重写事件处理程序方法以根据需要在一个地方处理适当的 WebDriver 事件。

Here每个方法对应一个事件。根据您的要求,您需要处理 afterNavigateTo() 方法。每次导航到页面完成时都会调用此方法。

您必须在此方法中对页面代码执行文本检查,以便每次页面导航到其他页面时都执行您的代码。

public class BaseClassForUiTest implements WebDriverEventListener
{

      ---------
      ---------

      public void afterNavigateTo(String arg0, WebDriver arg1) {
    // perform desire text checker stuff on the page here
  }
}

现在创建事件抛出​​ WebDriver 来执行您的测试 :-

  • 创建一个常规的 WebDriver。

    FirefoxDriver driver = new FirefoxDriver();
    
  • 现在使用上面创建的常规 WebDriver 创建一个 EventThrowingWebDriver

    EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
    
  • 创建一个 eventHandler class 的实例,并使用上面创建的 EventFiringWebDriver 对象的注册方法为事件注册它:-

    BaseClassForUiTest handler = new BaseClassForUiTest();
     eventDriver.register(handler);
    

完整代码:-

import org.openqa.selenium.support.events.EventFiringWebDriver;

public class BaseClassForUiTest {

 public void test() throws Exception {              

      FirefoxDriver driver = new FirefoxDriver();
      EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);

      BaseClassForUiTest handler = new BaseClassForUiTest();
  eventDriver.register(handler);

      eventDriver.get("your url");

      //Now do your further stuff
}
}