首页 文章

机器人框架:如何获取selenium webdriver的当前实例来编写我自己的关键字?

提问于
浏览
0

我在java中有一个maven驱动的Robot-framework项目,它使用selenium 3.4.0依赖,robotframework 3.0.2依赖,markusbernhardt的selenium2library版本1.4.0.8和robotframework-maven-plugin版本1.4.7 .

我的机器人测试存在于src / main / test / robotframework / acceptance文件夹中,而在src / main / java / mypackage中我创建了一个Customized.java文件来设置浏览器驱动程序路径的系统属性(然后我导入了这个库)我的测试:

*** Settings ***
Library             Selenium2Library
Library             mypackage.Customized

这非常有效 . 但现在我想实现自己的关键字来扩展Selenium2Library . 但我不确定如何获取正在运行的当前WebDriver实例 .

我的意思是,如果我不使用机器人而只是简单的Selenium,我会做这样的事情:

WebDriver driver=new ChromeDriver();
driver.doSomething();

但是,在这种情况下,我不想实例化新的WebDriver,而是获取当前正在运行的WebDriver(Robot自动实例化) . 我怎样才能做到这一点?

到目前为止,我创建了一个 Selenium2Library 对象并使用 Selenium2Library.getLibraryInstance(); 返回的值设置它,但是's not giving me access to selenium'方法(例如:未列出的getCurrentUrl()) .

2 回答

  • 0

    在python中,可以使用以下代码完成

    from robot.libraries.BuiltIn import BuiltIn
    
    
    def _browser(self):
        return BuiltIn().get_library_instance('Selenium2Library')._current_browser()
    
  • 1

    实际上,我找到了一个解决方案,但我不确定这是正确的方法:

    public class Customized {
    
        private static Selenium2Library s;
        private BrowserManagement b;
        private WebDriver driver;
    
        public Customized() throws ScriptException {
            try {
                Customized.s = (Selenium2Library) Selenium2Library.getLibraryInstance();
            } catch (javax.script.ScriptException e) {
                e.printStackTrace();
            }
            b = s.getBrowserManagement();
            driver=b.getCurrentWebDriver();
        }
    }
    

    现在可以从驱动程序对象获得selenium方法 . 但是,可能有更好的方法,因为 javax.script.ScriptException 异常中有此消息:“访问限制:类型'ScriptException'不是API(对所需库的限制'C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar')”

相关问题