2013-08-05 33 views
0

您可能認爲此問題與我之前的問題相同,但事實並非如此。我有這樣的網頁:使用硒從網頁讀取和存儲價值

Description  Some Description 
Appname   App1 
Duration   50 
Price   25 

我正在開發一個使用c#的硒應用程序,我在它的中間。我希望Selenium檢索並存儲字符串變量dur和price的持續時間和價格值(即50和25)。但是,這兩個值不超鏈接,並同時他們都得到了相同的屬性,如類名,ID標記名等

我已經使用此代碼嘗試,但預期它不工作:

string dur; 
string price; 
var elements = driver.FindElements(By.Id("SPFieldNumber")); 
IList<IWebElement> list = elements.ToArray(); 
foreach (IWebElement opt in list) 
{ 
dur = elements[0].ToString(); 
price = elements[1].ToString(); 
MessageBox.Show(dur); 
MessageBox.Show(price); 
} 

圍繞這些字段中的HTML代碼如下所示:

<td class="ms-formlabel" nowrap="true" width="165px" valign="top"> 
<h3 class="ms-standardheader"> 
<a name="SPBookmark_Duration"></a> 
Duration 
</h3> 
</td> 
<td id="SPFieldNumber" class="ms-formbody" width="450px" valign="top"> 365 </td> 

這將是有益的,如果你的任何一個能幫助我在這,因爲我的工作是保持現在..

在此先感謝..

+0

如果您可以提供圍繞這些特定元素的html,我們將能夠進一步提供幫助。謝謝。 –

+0

@MarkRowlands:請找到我編輯的問題.. –

+0

它是如何「不按預期工作」?它做什麼呢? – Arran

回答

0

現在你已經確切地解釋它做什麼做什麼,以及你期待,我可以清楚地看到錯誤:

IList<IWebElement> list = elements; 
foreach (IWebElement opt in list) 
{ 
    dur = elements[0].Text.ToString(); 
    price = elements[1].Text.ToString(); 
    MessageBox.Show(dur); 
    MessageBox.Show(price); 
} 

你想要.Text財產,你也別不需要.ToArray,你好像你想要一個for循環,而不是一個foreach循環。但這是不同的問題。

請注意,我說的對foreach循環,因爲你使用的是foreach循環,但仍通過引用其索引的元素(0和1)......這是一個循環for是什麼。

但是,你提到你只需要那些前兩個值,因此這些循環是不必要的,只會引起問題。

試試這個代碼了:

IList<IWebElement> list = elements; 
string duration = list.First(); 
string price = list.ElementAt(1); 
MessageBox.Show(duration); 
MessageBox.Show(price); 

您可能需要添加使用System.Linq

+0

的消息框感謝您的快速回復..讓我檢查它... –

+0

但是我如何使用循環而不是foreach,因爲不止一個內容在那裏有相同的ID「SPFieldNumber」??你能給我看一個樣本嗎? –

+0

那麼你是通過它們的索引明確引用元素0和1 *。您想做什麼?在你的'elements'列表中,我希望看到所有ID爲'SPFieldNumber'的元素....那麼'dur'和'price'對它們有什麼作用?一旦你像我建議的那樣使用'.Text',他們的*精確*值是什麼? – Arran