2013-10-14 15 views
5

我正在開發一個用一些自定義命令擴展Selenium 2的庫。該庫應該可以從Selenium的Java和Python綁定以及Selenium IDE中使用。從我的research中,這三個目標綁定至少應覆蓋所有Selenium 2腳本的80%。Selenium WebDriver:我可以在多大程度上依賴JavaScript?

爲了實現我對Selenium IDE的自定義命令,我想我需要爲它編寫一個JavaScript插件。

我的問題是這樣的:如果我已經在JavaScript中實現了自定義命令,那麼將此實現重用到我的庫的Java和Python綁定是否安全?

我想通過WebDriver#executeScript注入我的命令的JavaScript實現的方法。這是我所想的一個僞代碼實現。

在Java:

public void fooJava() { 
    executeScript("Inject code.js"); 
    executeScript("fooJavaScript();"); 
} 

code.js

function fooJavaScript() { 
    // Implementation of command "foo" from Selenium IDE plugin. 
} 

所以,在Java執行我的自定義命令fooJava(),我的圖書館code.js將通過executeScript被注入到瀏覽器中。這將包含foo的執行JavaScript,例如fooJavaScript。在接下來的executeScript呼叫中,將調用此fooJavaScript

雖然這種方法會阻止我爲實現我的自定義命令三次(使用Java,Python,硒IDE),我有幾個擔心:

  1. 當我注入我code.js,我在危險破壞網站的全球狀態?
  2. 我可以在多大程度上依賴於JavaScript?如果有警報對話框,它會工作嗎?在實踐中,使用Selenium的驅動有多少個而不是支持JavaScript?例如。 HtmlUnit
  3. 這項工作是否適用於所有主流瀏覽器(IE,Chrome,Firefox,Safari的最新版本)?

您對此的真實體驗將不勝感激。

+4

從我的「真實生活中的經驗」..我已經_rarely_需要測試時甚至使用JavaScript。在我看來,如果你需要觸發一些JavaScript事件,那麼這是糟糕的應用程序設計。通常只是糟糕的設計才能從UI中抽象出來。我的意思是,那就是你正在測試的,不是嗎? – sircapsalot

回答

1

原則聲明,如果您只是使用WebDriver傳遞有效內容,則不應將JS用作測試機制。

的webdriver =集成測試
JS =如果你想進行單元測試

我不知道您的使用情況完全是,但是:

如果你想運行集成測試,堅持WebDriver來最好地模擬用戶交互。您還可以通過依靠WebDriver鉤子與頁面進行交互來避免將來出現跨瀏覽器JS問題,因爲您最好依靠社區爲每個瀏覽器提供可靠的基本DOM交互API。如果您無法通過瀏覽器交互觸發測試條件,那麼您將進入單元/代碼測試領域,而不是集成測試。

如果您嘗試運行JS以便基本上測試單個函數或代碼段,而不是集成交互,則您正嘗試運行單元測試。單元測試最好在JS中用Jasmine(在這裏命名任何框架)完成。

推理:
集成測試應當編寫得實現獨立越好。您不需要知道函數名稱即可觸發集成測試,因爲將來可能會更改函數名稱或重構代碼。
由於您正在填寫QE /測試人員角色,因此您不希望在代碼更改時負責打破集成測試 - 如果您使用該代碼並負責,則每次執行代碼重構時都需要更改測試。

來源:在10,000多名員工軟件公司中擔任QE的經驗。

相關問題