0

Selenium名前空間を拡張しました。ただし、GetXpathCount()関数はまだ認識されません。誰かが解決策を知っていますか?ありがとう!

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

次のエラーメッセージが表示されました。

タイプまたは名前空間の名前'GetXPathCount'が名前空間'Selenium'に存在しません(アセンブリ参照がありませんか?)

コード構造全体は次のとおりです。

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

SeleniumWebDriverとSeleniumRCを組み合わせて使用​​しているようです。

これが原因で、新しいドライバー(WebDriver API)を作成していると思います。

Driver = CreateDriverInstance(BaseUrl);

次に、ここではRC APIを使用しています(SeleniumクラスはRC APIの一部です)。

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

との両方にusingディレクティブもOpenQA.SeleniumありSeleniumます。これは、あなたがそれを非常に間違って行っていることの別の兆候でもあります。

三つのこと:

  1. DriverAPIとRCAPIのどちらを使用するかを決定します。2つを混ぜないでください。乱雑になり、どこからともなく現れる非常に奇妙な問題によって髪が失われる原因になります。
  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();

また

また推奨されません:WebDriverバッキングを使用できるようにしながら古いRCAPIを提供するWebDriverBackedSeleniumAPIを使用することを選択してください。

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

別の観察:

NUnitとMSTest(および)の両方にを使用することを含めましたが、MSTestを使用しているようです。NUnit.FrameworkMicrosoft.VisualStudio.TestTools.UnitTesting

MSTestを使用している場合は、NUnit参照を削除してください。混乱が増し、コンパイル時間が長くなり、不要な参照が作成されるだけです。

于 2013-02-21T09:28:54.623 に答える