![](/img/trans.png)
[英]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.