0

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

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

围绕这些字段的 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>

如果你们中的任何人可以帮助我,这将是有帮助的,因为我的工作现在被搁置了。

提前致谢..

4

1 回答 1

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

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

于 2013-08-05T11:26:24.197 回答