我计划使用以下代码计算页面响应时间,但这会导致冗余。
long start;
start = System.currentTimeMillis();
driver.get(url); or click();
System.out.println (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
我知道使用 Page 对象实现上述代码,需要帮助使用 Webdriver 接口扩展 click(),以便当我调用 click() 时会自动执行上面的代码。
正如我阅读了您的评论一样,还有一种可能性。构建你自己的类,它将实现WebElement接口。在这种情况下,您将不得不实现WebElement的所有方法,这可能不值得。但是如果你想采用这种方法,我会建议这样的东西:
public class MyWebElement implements WebElement{
private WebElement element
//... all the WebElement methods must be implemented
//but I will show only the click:
@Override
public void click(){
long start;
start = System.currentTimeMillis();
element.click();
System.out.println (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
}
}
稍后在代码中:
@Test
public void testSomething(){
driver.get("http://foo.bar");
MyWebElement elem = driver.find(By.id("baz"));
elem.click();
}
再次:通过使用这种方法,您必须实现所有 WebElement 方法 - 即使是那些您永远不会在测试中使用的方法。在你的位置上,我会使用我在 mz 之前答案中暗示的方法。
我实现它的方式是我编写自己的Java类来表示页面。所以如果我想测试谷歌,我有一些看起来像这样的类:
public class GoogleUI{
private WebElement searchButton;
private WebDriver driver;
public GoogleUI(){
driver = new FirefoxDriver();
}
public void clickSearch(){
long start;
searchButton = driver.findElement(By.name("btnG"));
start = System.currentTimeMillis();
searchButton.click();
System.out.println (driver.getTitle() + " - " + (System.currentTimeMillis() - start) + " MilliSec");
}
}
稍后在测试中:
@Test
public void testGoogleSearchButton(){
GoogleUI google = new GoogleUI();
google.clickSearch();
}
其中,clickSearch
方法本身包装单击并打印时间。
这显然被简化到绝对最低限度,但我希望你能在你的测试中适应它