[英]How to write my own customize locator for Selenium webdriver in java?
[英]Robot framework: how can I get current instance of selenium webdriver to write my own keywords?
我在 java 中有一个 maven 驱动的 Robot-framework 项目,它使用 selenium 3.4.0 依赖项、robotframework 3.0.2 依赖项、markusbernhardt 的 selenium2library 版本 1.4.0.8 和 robotsframework-maven-plugin 版本 1.4.7。
我的机器人测试位于src/main/test/robotframework/acceptance文件夹中,而在src/main/java/mypackage 中,我创建了一个 Customized.java 文件来为浏览器驱动程序路径设置系统属性(然后我在我的测试:
*** Settings ***
Library Selenium2Library
Library mypackage.Customized
这完美地工作。 但现在我想实现我自己的关键字来扩展 Selenium2Library。 但我不确定如何获取当前正在运行的 WebDriver 实例。
我的意思是,如果我不使用 Robot 而只使用普通的 Selenium,我会做这样的事情:
WebDriver driver=new ChromeDriver();
driver.doSomething();
但是,在这种情况下,我不想实例化一个新的 WebDriver,而是获取当前正在运行的(Robot 自动实例化的)。 我怎样才能做到这一点?
到目前为止,我已经创建了一个Selenium2Library
对象并使用Selenium2Library.getLibraryInstance();
返回的值设置它Selenium2Library.getLibraryInstance();
但这并没有让我访问 selenium 的方法(例如:getCurrentUrl() 未列出)。
在python中可以用以下代码完成
from robot.libraries.BuiltIn import BuiltIn
def _browser(self):
return BuiltIn().get_library_instance('Selenium2Library')._current_browser()
实际上,我找到了一个解决方案,但是我不确定这是正确的方法:
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();
}
}
现在,可以从驱动程序对象中使用硒方法。 但是,可能有更好的方法,因为javax.script.ScriptException
异常中显示以下消息:“ 访问限制:类型'ScriptException'不是API(对必需的库'C:\\ Program Files \\ Java \\ jdk1.8.0_131 \\ jre \\ lib \\ rt.jar') “
对于较新的 Selenium 版本 (4.0),可以使用以下代码段:
class SelCustomLib():
def get_browser_driver(self):
return BuiltIn().get_library_instance('SeleniumLibrary').driver
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.