每页都有文字检查(Selenium)

时间:2016-09-07 15:21:03

标签: java selenium web selenium-webdriver ui-automation

使用Java,我试图在现有测试访问的Web应用程序的每个页面上编写特定文本的常规检查。而不是必须单独在每个页面上编写它,是否可以在一个高级别的位置(可能在基类中)?

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

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

每个测试都从BaseClassForUiTest延伸,并覆盖test()方法。

2 个答案:

答案 0 :(得分:1)

  

而不是必须在每个页面上单独编写它,是否可以在一个高级别的位置(可能在基类中)?

是的,可以通过BaseClassForUiTest实现WebDriver并覆盖事件处理程序方法,以便在一个地方根据需要处理相应的afterNavigateTo()事件。

WebDriverEventListener每个方法都对应一个事件。根据您的要求,您需要处理public class BaseClassForUiTest implements WebDriverEventListener { --------- --------- public void afterNavigateTo(String arg0, WebDriver arg1) { // perform desire text checker stuff on the page here } } 方法。每次导航到页面时都会调用此文件。

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

FirefoxDriver driver = new FirefoxDriver();

现在创建事件投掷WebDriver以执行测试: -

  • 创建常规WebDriver。

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

    eventHandler
  • 创建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
    }
    }
    

完整代码: -

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
.
.
.
</Linearlayout>

答案 1 :(得分:0)

对于我来说,您最好使用Parameterized or JUnitParams为此检查创建一个单独的测试类,并为其提供一个作为参数运行的URL,但这取决于您运行测试的常用方法是什么(我们同时运行所有testpack,因此在这种情况下它是我们的解决方案)。 它似乎也是逻辑上分离的解决方案

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