0

我已经扩展了 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");

            ..........

        }
4

1 回答 1

1

您似乎混合使用了 Selenium WebDriver 和 Selenium RC。

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

Driver = CreateDriverInstance(BaseUrl);

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

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

您还有一个用于OpenQA.Selenium和的 using 指令Selenium。这也是另一个迹象,表明你做的非常非常错误

三件事:

  1. 决定是要使用 Driver API 还是 RC API。不要将两者混为一谈,它会变得一团糟,并导致你因为突然出现的非常奇怪的问题而脱发。
  2. 即使您选择使用 RC API,该GetXPathCount方法也不是静态方法,这就是您会收到原始错误的原因。
  3. 无论如何,您的 XPath 都不正确...我将假设这是某物的 ID,但我建议正确学习 XPath 查询。

建议:

推荐:由于您使用的是 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)的 using,但您似乎正在使用 MSTest。

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

于 2013-02-21T09:28:54.623 回答