使用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()
方法。
答案 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块中调用它(但在我看来,它仍然不是一个好的解决方案)