2014-08-28 28 views
0

在Watir中,我將如何更改DOM元素的類?其實我需要刪除其中的一個元素類(三個)?Ruby Watir,如何更改DOM元素的類?

我已經嘗試了一些可能的解決方案,但不能讓他們中的任何人工作。任何事情都會有幫助。

回答

1

由於普通用戶不會直接更改元素的類,Watir尚未提供直接執行此操作的方法。但是,由於使用Javascript刪除類是可行的,因此可以通過execute_script方法執行此操作。

說我們有一個頁面,有三類一些文本 - 一個使文字大,一來使文本紅一,使文本加粗:

<html> 
    <head> 
    <style> 
     .label {font-size: 14em;} 
     .required {font-weight: bold;} 
     .error {color: red;} 
    </style> 
    </head> 
    <body> 
    <span class="label required error">text</span> 
    </body> 
</html> 

我們可以刪除的一個類,說使文本顯示爲紅色類,通過對網頁執行JavaScript:

# Locate the element in Watir 
element = browser.span 

# Check that the text's original color is red 
p element.style('color') 
#=> "rgba(255, 0, 0, 1)" (red) 

# Execute Javascript to remove the required class, which makes the text red 
browser.execute_script('arguments[0].classList.remove("error");', element) 

# Check that the text's new colour is now black 
p element.style('color') 
#=> "rgba(0, 0, 0, 1)" (black) 

classList方法在某些瀏覽器版本只支持。我相信鉻/火狐都支持它相當長的一段,那裏的IE需要至少版本10.如果您需要支持舊的瀏覽器,你也可以做一個字符串替換:

browser.execute_script('arguments[0].className = arguments[0].className.replace(/(?:^|\s)error(?!\S)/ , "")', element) 

你也可以使用jQuery如果你有它可用。

請注意,在execute_script中,我們使用Watir/Selenium的特殊arguments數組,以便我們可以將Watir元素傳遞給Javascript。我發現這對查找元素更容易,但如果您願意,還可以使用Javascript來查找元素。

+0

工程就像一個魅力!謝謝Justin。我很感激。 :) – tomgalpin 2014-08-29 23:59:56