2016-06-10 145 views
1

我正在使用硒來自動化一些測試用例,但我遇到了一些問題,發現一些沒有特定樣式的元素。我已經創建了這個在Chrome中完美工作的Xpath,但是當我使用硒運行它時,它不能按我的需要工作。如何在Selenium中使用xpath'not'語句?

XPATH:./td[not(contains(@style, 'foo'))]

所以basicaly的HTML看起來像這樣:

<tr id='something'> 
    <td style='foo'><td/> 
    <td style='foo'><td/> 
    <td style='foo'><td/> 
    <td style='foo'><td/> 
    ... 
    <td>1<td/> 
    <td>2<td/> 
    <td>3<td/> 
</tr> 

所以基本上我想最後3個TDS所以首先我得到的行,然後我把Xpath的。 。 。這樣的事情:

var row = driver.FinElement(By.Id("something")); 
ReadOnlyCollection<IWebElement> items = row.FindElements(By.Xpath(./td[not(contains(@style, 'foo'))]; 

但因此,我得到了tr的所有孩子。

任何想法爲什麼Xpath正在使用Chrome開發人員工具並且不能使用selenimun IE驅動程序?

+0

你可以試試'.//td[not(contains(@style,'foo')' – nullpointer

+0

你確定IE支持XPATH嗎? –

回答

1

與Chrome相比,IE格式化了style屬性。 例如,如果在HTML的風格是:

<td style='DISPLAY:BLOCK;'> 

IE將其更改爲:

<td style='display: block;'> 

因此,與鍍鉻//td[@style='DISPLAY:BLOCK;']將返回匹配和IE瀏覽器將不返回匹配。現在

,你的榜樣,在解決獲得最後3個元素將得到所有<td>沒有一個樣式屬性:

./td[not(@style)] 

你也可以正常化外殼與translate刪除空格:

./td[not(contains(translate(@style,'FO ','fo'), 'foo'))] 
0
  1. 你能嘗試以下操作:

    .//td[not(contains(@style, 'foo') // double back slash for child element 
    

docs訪問子

  • 請確保你是不是錯,因爲contains的情況下匹配是區分大小寫的。回答How to use not contains() in xpath?