首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行时使用java工具调用方法

如何在运行时使用java工具调用方法
EN

Stack Overflow用户
提问于 2018-02-08 11:26:58
回答 1查看 186关注 0票数 0

我对这个仪器概念完全陌生。我有一个定制的jar文件,它有很多方法。让我们假设现在我有开始和停止方法。为了收集开始和停止度量,我需要在每次单击之后调用这些方法。而不是这样做,是有一个方法来检测这个。我希望在运行时前后对所有可单击的元素动态调用此方法。任何关于这方面的建议都会很好。提前谢谢。请找到样本代码。

自定义方法:

代码语言:javascript
复制
  Public void start (){
    long start = System.currentTimeMillis();
    }

    public void stop{
    long finish= System.currentTimeMillis();
     long totalTime = finish - start;
    }

示例代码:

代码语言:javascript
复制
start();
driver.findElement(By.name("username")).sendkeys("@@@");
stop();

start();
driver.findElement(By.name("password")).sendkeys("@@@");
stop();

start();
driver.findElement(By.name("login")).click();
stop();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 16:19:03

这里有一个使用ByteBuddy的示例插装解决方案,尽管正如我在这个问题下的注释中提到的,它可能不是解决这个问题的最佳方法。

对于这个简单的示例,代码只包含WebDriver和WebElement上的调用被链接的情况,例如:

代码语言:javascript
复制
driver.findElement(By.name("login")).click();
driver.findElement(By.name("logout")).click();

如果没有额外的编码,下面这样的片段将无法工作:

代码语言:javascript
复制
WebElement element1 = findElement(By.name("login"));
WebElement element2 = findElement(By.name("logout"));
element2.click();
element1.click();

仪表代码:

代码语言:javascript
复制
public class ByteBuddyTest {

    public static void main(String[] args) throws Exception {    

        ByteBuddyAgent.install();

        new ByteBuddy()
            .redefine(RemoteWebDriver.class)
            .visit(Advice.to(WebDriverAdvice.class).on(named("findElement").and(takesArguments(1))))
            .make()
            .load(ByteBuddyTest2.class.getClassLoader(),
                  ClassReloadingStrategy.fromInstalledAgent());

        new ByteBuddy()
            .redefine(RemoteWebElement.class)
            .visit(Advice.to(WebElementAdvice.class).on(named("click")))
            .make()
            .load(ByteBuddyTest2.class.getClassLoader(),
                  ClassReloadingStrategy.fromInstalledAgent());

        InternetExplorerDriver driver = new InternetExplorerDriver();

        driver.get("<some webpage>");

        driver.findElement(By.id("<some_id>")).click();
    }

    public static class WebDriverAdvice {    
        @Advice.OnMethodEnter
        public static void enter(@Advice.Origin String method) {
            System.out.printf("Driver Method Enter: %s\n", method);
            Times.start = System.currentTimeMillis();
        }
    }

    public static class WebElementAdvice {
        @Advice.OnMethodExit
        public static void exit(@Advice.Origin String method, @Advice.This Object target) {
            System.out.printf("Element Method Exit: %s\n", method);
            System.out.println("Time: " + (System.currentTimeMillis() - Times.start));
        }
    }

    public static class Times {
        public static long start = 0L;
    }
}

使用 WebDriverEventListener的示例

代码语言:javascript
复制
public class WebDriverEventListenerTest {

    public static void main(String[] args) throws Exception {

        InternetExplorerDriver driver = new InternetExplorerDriver();
        EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
        eventDriver.register(new EventHandler());

        eventDriver.get("<some webpage>");
        eventDriver.findElement(By.id("<some id>")).click();
        eventDriver.findElement(By.id("<some id>")).click();
    }

    public static class EventHandler extends AbstractWebDriverEventListener {

        @Override public void beforeFindBy(By by, WebElement element, WebDriver driver) {
            System.out.printf("Driver Find By: %s\n", by);
            Times.start = System.currentTimeMillis();
        }

        @Override public void afterClickOn(WebElement element, WebDriver driver) {
            System.out.printf("Element Method Exit: %s\n", element);
            System.out.println("Time: " + (System.currentTimeMillis() - Times.start));
        }
    }

    public static class Times {
        public static long start = 0L;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48684392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档