2012-11-05 124 views
0

SeleniumHQ表示每個驅動程序都支持其瀏覽器支持的任何CSS選擇器。根據this site,IE 9應支持:第n類型()選擇器。但是,當我在此選擇器上執行findElements時,我似乎從RemoteWebDriver類的深度獲得NullPointerException。我的By.cssSelector看起來像這樣:WebDriver - 「:nth-​​of-type()」選擇器是否適用於IE 9?

table#ucsp_dgMultiSelect tr:nth-of-type(2) input#cbPres 

這在Chrome上正常工作。也許IE 9在把那個選擇器放在中間存在一個問題,我不知道,但那會破壞我的很多代碼。 :nth-​​type()選擇器已成爲識別表中WebElement定位器的一種工具。有沒有其他人成功使用:nth-​​type()選擇器作爲WebDriver和IE 9的定位器?

我使用IEDriverServer.exe.2.25.2.0和我的IE版本是9.0.8112.16421 64位

+2

那裏似乎有錯。 IE9在CSS中支持':nth-​​of-type()'。無論如何,如果你使用':nth-​​child()'而不是?對於'tr'元素,它們基本上是一樣的。 – BoltClock

+0

只要你沒有一個討厭的'colgroup'或'caption'沒有'thead'或'tbody'。 – canon

+1

@canon:這隻會在XML序列化標記中起作用,其中標記中的table> tr'元​​素不會在DOM中被賦予其自己的'tbody'。在HTML中,對於任何'n','tr:nth-​​child(n)'和'tr:nth-​​of-type(n)'總是相同的。 – BoltClock

回答

2

webdriver的呢,其實,支持瀏覽器所做的CSS選擇器,和如果IE9支持:nth-of-type()選擇器,那麼IE驅動程序也應該如此。但是,這不是整個故事。如果頁面中的DOCTYPE不是現代標準(例如<!DOCTYPE html>,IE也試圖猜測它應該如何呈現文檔,並且如果它猜測它應該將其呈現爲先前的IE版本,則它將使用以前版本的CSS選擇器引擎

由於您使用的是IE9,因此有一種非常簡單的方法可以查看WebDriver是否應該能夠使用您嘗試使用的選擇器查找該元素,然後打開「F12 Developer工具」通過按功能鍵F12,而你在你感興趣的頁面上。轉到開發人員工具中的腳本選項卡,然後鍵入

document.querySelector('table#ucsp_dgMultiSelect tr:nth-of-type(2) input#cbPres') 

如果控制檯顯示的元素INF那麼WebDriver應該能夠找到它。如果沒有,那麼IE無法找到它,WebDriver也永遠不會。

這個調試技術可以在任何時候在IE9中使用CSS選擇器查找元素時使用,並且在幫助查明問題是IE還是驅動程序時是非常有用的。另外,F12開發者工具也會告訴你IE試圖渲染頁面的模式,這也是有啓發性的。

+0

非常感謝!我公司的網站應該與IE9標準兼容,但這個網頁以及其他網站可能使用的是怪癖模式。如果我在開發人員工具中將文檔模式更改爲IE9標準,則'querySelector'命令成功。所以我發現了一個錯誤,現在可以確保我們的網站具有適當的Doctype。再次感謝! –