C# 使用selenium读取和存储网页中的值

C# 使用selenium读取和存储网页中的值,c#,selenium,C#,Selenium,你可能认为这个问题和我之前的问题一样,但事实并非如此。我有一个这样的网页: Description Some Description Appname App1 Duration 50 Price 25 我正在使用c#开发一个selenium应用程序,我正在进行中。我希望Selenium检索并将持续时间和价格值(即50和25)存储到字符串变量dur和price中。但这两个值都不是超链接,而且它们都具有相同的属性,如类名、id、标记

你可能认为这个问题和我之前的问题一样,但事实并非如此。我有一个这样的网页:

Description      Some Description
Appname          App1
Duration         50
Price            25
我正在使用c#开发一个selenium应用程序,我正在进行中。我希望Selenium检索并将持续时间和价格值(即50和25)存储到字符串变量dur和price中。但这两个值都不是超链接,而且它们都具有相同的属性,如类名、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);
 }
string-dur;
串价;
var元素=driver.FindElements(By.Id(“SPFieldNumber”);
IList list=elements.ToArray();
foreach(IWebElement选择加入列表)
{
dur=元素[0]。ToString();
price=元素[1]。ToString();
MessageBox.Show(dur);
MessageBox.Show(价格);
}
围绕这些字段的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>

期间
365
如果你们中有人能在这方面帮助我,那将是非常有帮助的,因为我的工作现在被搁置了


提前感谢。

现在您已经准确地解释了它的功能,以及您的期望,我可以清楚地看到错误:

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);
}

您可能需要添加using for
System.Linq

如果您可以提供围绕这些特定元素的html,我们将能够提供进一步的帮助。谢谢。@MarkRowlands:请找到我编辑过的问题..它是如何“不按预期工作”的?它的作用是什么?@Arran:我试图让selenium显示这些字段的值。相反,它显示的是一个messagebox,内容为OpenQA.selenium.Firefox.FirefoxWebElement。但是我如何使用for循环而不是foreach,因为有多个内容具有相同的ID“SPFieldNumber”??你能给我看一个例子吗?你是通过索引显式引用元素0和1。你想做什么?在您的
elements
列表中,我希望看到ID为
SPFieldNumber
的所有元素,
dur
price
中有什么?一旦你像我建议的那样使用
.Text
,它们的确切值是多少?持续时间和价格的值分别是25和50。简言之,两者都是整数类型。希望这就是你的意思。还有什么其他值?我知道第一个是工期,然后是价格,然后呢?名单大吗?我基本上是想看看你是否真的需要遍历它们。实际上这个列表有11个值,其中我只需要这两个值(dur和price)。在执行代码时,我可以得到这两个值9次,也就是说,这两个值在消息框中显示9次,一个接一个。但是除了这两个值之外,ID属性是不同的,仅供参考。
IList<IWebElement> list = elements;
string duration = list.First();
string price = list.ElementAt(1);
MessageBox.Show(duration);
MessageBox.Show(price);