选择元素问题 - webdriver - c#

时间:2013-10-24 08:47:38

标签: c# selenium webdriver nunit selenium-webdriver

我在NUnit中运行时遇到以下错误,

enter image description here

我找到一个元素并将其存储在变量中,并且在尝试选择元素时,我收到了错误。尝试以这种方式使用

IWebElement fromitem = WebDriver.FindElement(By.Id("from"));但同样的错误仍然存​​在。 有什么方法可以选择元素吗?

注意:我用firebug验证了元素id,似乎没有问题。

以下代码,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.Events;
using OpenQA.Selenium.Support.PageObjects;

namespace SeleniumTests
{
[TestFixture]  
public class Sel
{
    public static IWebDriver WebDriver;
    private String baseURL;

    [SetUp] 
    public void SetupTest()
    {
        WebDriver = new FirefoxDriver(); 
        baseURL = "http://www.x-rates.com/calculator.html";
    }

    [TearDown] 
    public void TeardownTest()
    {
        WebDriver.Quit(); 
    }

    [Test]
    public void newtest()
    {
        WebDriver.Navigate().GoToUrl(baseURL + "/");

        var fromitem = WebDriver.FindElement(By.Id("from"));
        var toitem = WebDriver.FindElement(By.Id("to"));

        var fromval = new SelectElement(fromitem); //Error occurs

        var toval = new SelectElement(toitem);
        fromval.SelectByText("USD - US Dollar");
        toval.SelectByText("INR - Indian Rupee");
        WebDriver.FindElement(By.LinkText("Currency Calculator")).Click();
        var curval =   WebDriver.FindElement(By.CssSelector("span.ccOutputRslt")).GetAttribute("Value");
        var expectedValue = 61.456825;


        Thread.Sleep(900);

        Assert.AreEqual(expectedValue, curval.Trim());

    }

  }
}

1 个答案:

答案 0 :(得分:2)

SelectElement类只能用于实际的HTML <select>元素。在您提供的页面中,相关元素是<input>元素,通过CSS和JavaScript添加功能,使其能够像下拉列表一样运行。因此,尝试将其与SelectElement类一起使用将抛出异常,指示该元素的类型不正确。

“文件不存在”错误消息是红色鲱鱼。它只是因为NUnit试图向您展示抛出异常的源代码行,这是WebDriver源代码的一部分。该行代码抛出的异常应显示在NUnit中的某个位置,该异常应包含相应的信息性消息。