2014-02-10 152 views
2

我使用C#和硒的webdriver,我試圖找到一個div元素在我的HTML代碼如下所示:如何找到div元素沒有與硒的webdriver id屬性

<div class="x-grid-cell-inner" style="text-align: left;" unselectable="on"> 
    phys_tag_desc 
</div> 

我不能找到一種方法來搜索Selenium Webdriver的div元素的值。我已經搜索過這個網站並檢查了Selenium Webdriver Documentation,但是找不到任何東西。

+0

那麼,什麼是關於'div'獨特之處? – Arran

+0

你有沒有嘗試過使用xpath? ** // div [@ class ='x-grid-cell-inner'] ** – Husam

+0

謝謝您的迴應。問題是沒有什麼獨特的div元素。有更多的div元素,其中class ='x-grid-cell-inner。唯一唯一的是文本值,我不知道如何搜索它。 – user3292642

回答

3

那麼,如果文本值是唯一的,那麼解決方法很簡單。嘗試下面的xpath:

//div[text()='phys_tag_desc'] 

如果文本不完全匹配。嘗試以下操作:

//div[contains(text(),'phys_tag_desc')] 
2

我有兩種方法。方式2更復雜但更有效。

方式1;

您可以循環在所有div和尋找一些等於

例子:

foreach(HtmlElement o in webbrowser.Document.GetElementByTagName("div")) 
{ 
    HtmlElement yourElement; 
    if(o.GetAttribute("class")=="x-grid-cell-inner"&&o.GetAttribute("style")=="text-align: left;") 
    { 
     yourElement=o; 
     break; 
    } 
    DoSomethingWith(yourElememt); 
} 

另一種方式是遵循元件的路徑; 你可以找到具有ID 例封口元件:

<div id="element"> 
    <div>content..</div> 
    <div> 
     <div class="x-grid-cell-inner" style="text-align: left;" unselectable="on"> 
     phys_tag_desc 
     </div> 
    </div> 
</div> 

那些對這個例子ID最接近的元素是

<div id="element"> 

你的元素的父是2 ID =「元素的子「格 你可以得到它,並按照路徑這樣

yourElement = webbrowser.Document.GetElementById("element").Children[1].Children[0]; 
+0

非常感謝。我會嘗試解決方案1,但我不太滿意。解決方案2不會工作,因爲我的HTML代碼中的所有其他元素每次調用頁面時都會更改其ID值。 – user3292642

+0

@ user3292642如果元素的html路徑沒有改變,你可以按照這樣的標籤關注它們:webbrowser.Document.GetElementByTagName(「body」)[0] .Children [0] .Children [8] ....太長但太有效。 –

0

在其他情況下,你可以使用XPATH布爾運算符。 嘗試的XPath如下:

By.XPath("//div[contains(@class,'*x-grid-cell-inner*') and contains(@unselectable, '*on*') and contains(text(),'*phys_tag_desc*')]") 

再見

相關問題