有谁知道为什么GetXpathCount()在C#中不起作用?

时间:2013-02-20 01:50:49

标签: c# xpath selenium webdriver selenium-webdriver

我扩展了Selenium命名空间。但它仍然无法识别GetXpathCount()函数。有谁知道解决方案?谢谢!

int count = Selenium.GetXpathCount("ctl00_ContentPlaceHolder1_TVNCategoryGridView");

我收到以下错误消息:

名称空间'Selenium'中不存在类型或命名空间名称'GetXPathCount'(您是否缺少程序集引用?)

以下是整个代码结构:

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Selenium;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using System.Threading;
using NUnit.Framework;

  .......(test class extending base test)


    public void TestSetup()
        {

            Driver = CreateDriverInstance(BaseUrl);
            Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
            Driver.SwitchTo().Window(Driver.CurrentWindowHandle);



        }
        [TestCleanup()]
        public void TestCleanup()
        {
            Driver.Quit();
        }



[Priority(1), TestMethod]
        public void NewShowTest()
        {

            Open("~/NewShow.aspx");
            Random rnd = new Random(DateTime.Now.Second);
            string shownum = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + " " + rnd.Next(0, 10000).ToString();
            testShowName = "Test Show " + shownum;
            int count = Selenium.GetXpathCount("ctl00_ContentPlaceHolder1_TVNCategoryGridView");

            ..........

        }

1 个答案:

答案 0 :(得分:1)

您似乎正在使用Selenium WebDriver和Selenium RC的混合。

我相信这是因为在这里,你正在创建一个新的驱动程序(WebDriver API):

Driver = CreateDriverInstance(BaseUrl);

然后在这里,您正在使用RC API(Selenium类是RC API的一部分):

int count = Selenium.GetXpathCount("ctl00_ContentPlaceHolder1_TVNCategoryGridView");

您还有OpenQA.SeleniumSelenium的使用指令。这也是你正在做的另一个迹象非常非常错误

三件事:

  1. 决定是否要使用Driver API或RC API。不要在两者之间混淆,它会变得混乱,导致你因无处不在的奇怪问题而失去头发。
  2. 即使您选择使用RC API,GetXPathCount方法也不是静态方法,这就是您收到原始错误的原因。
  3. 你的XPath无论如何......我会假设这是某些东西的ID,但我建议你正确学习XPath查询。
  4. 建议:

    推荐:由于您使用的是C#,因此您可以使用LINQ to Objects的强大功能,并模仿完全 GetXPathCount 的功能。通过这个:

    Driver.FindElement(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_TVNCategoryGridView']")).Count;
    

    虽然如果这只是一个ID,你可以简单地做到:

    Driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_TVNCategoryGridView")).Count;
    

    根本不推荐:选择使用RC API并使用DefaultSelenium正确实例化Selenium类:

    ISelenium selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://www.google.com");
    selenium.Start();
    int amountOfElementsMatchingXPath = selenium.GetXpathCount("//*[@id='ctl00_ContentPlaceHolder1_TVNCategoryGridView']");
    selenium.Stop();
    

    也不推荐:选择使用WebDriverBackedSelenium API,它将为您提供旧的RC API,同时允许您使用WebDriver支持。

    var webDriverBackedSelenium = new WebDriverBackedSelenium(Driver, "http://www.google.com");
    int amountOfElementsMatchingXPath = webDriverBackedSelenium.GetXpathCount("//*[@id='ctl00_ContentPlaceHolder1_TVNCategoryGridView']");
    

    另一个观察结果:

    您已经包含了 NUnit和MSTest(NUnit.FrameworkMicrosoft.VisualStudio.TestTools.UnitTesting)的使用,但您似乎正在使用MSTest。

    如果您坚持使用MSTest,请删除您的NUnit引用,这只会增加混乱,增加编译时间并构建不必要的引用。