Atoms 已加入 Selenium IDE
分類
正如 Simon 在 「原子化:原因?」 和 「原子化:方法」 中提到的,Selenium 和 WebDriver 合併的一部分是為了在這兩者之間共享通用程式碼。 並且從 Selenium IDE 的 1.0.10 版本開始,此合併的程式碼「atoms」現在已包含在內。
此版本的早期使用者注意到,驅動 assertAttribute 和 verifyAttribute 的 atom 導致他們的腳本中斷。 這篇文章解釋了「原因」,並提出了修復方法。
HTML 規格具有布林屬性的概念,布林屬性是僅透過存在而非透過其值來執行某些操作的屬性;checked 和 selected 是這類屬性的兩個範例。 或者,您可以為這些布林屬性賦予與其名稱相同的值 (checked="checked"),您的頁面仍然會驗證,但實際上,瀏覽器只關心屬性是否存在。
在 1.0.10 之前,人們經常會執行類似以下的操作
assertAttribute | checkbox@checked | checked
這會擷取 ID 或名稱為 checkbox 的核取方塊上 checked 屬性的值,如果該值未核取,則腳本會失敗。
但在 1.0.10 中,即使已核取,也會失敗。 這是因為 checked 是一個布林屬性,現在將傳回 true,否則會擲回例外,指出該屬性不存在。 重新執行上述步驟以檢查布林屬性是否已設定,結果如下
assertAttribute | checkbox@checked | true
值得慶幸的是,與布林屬性的絕大多數實際互動都集中在 checked、disabled、hidden 和 selected 上,在這些情況下,使用 assertAttribute 並非真正正確的做法。 相反地,Selenium API 提供了包裝函式供您使用。
| checked | assertChecked(locator), assertNotChecked(locator), verifyChecked(locator), verifyNotChecked(locator) |
| disabled | assertEditable(locator), assertNotEditable(locator), verifyEditable(locator), verifyNotEditable(locator) |
| hidden | assertVisible(locator), assertNotVisible(locator), verifyVisible(locator), verifyNotVisible(locator) |
| selected | assertSelected*(locator, pattern), assertNotSelected*(locator, pattern), verifySelected*(locator, pattern), verifyNotSelected*(locator, pattern) |
檢查不存在沒有良好包裝函式的布林屬性有點麻煩。 在此範例中,我正在檢查名稱為 elephants 的 select 元素上是否不存在布林屬性 multiple。
assertEval | this.browserbot.findElement("css=select[name=elephants]").getAttribute("multiple"); | null
如果您發現自己經常執行此操作,我建議您將其包裝在使用者擴充功能中,並放在 外掛程式 內,類似如下
assertBooleanAttribute | css=select[name=elephants]@multiple | false
assertBooleanAttribute | css=select[name=elephants]@multiple | true
希望這能解決一旦 Selenium IDE 1.0.10 獲得更廣泛的發布後,最終會突然出現的一些「我的腳本為何會中斷!?!?!」問題。




