2

次のような単純なテストクラスがあります。

public class MyTest
{
    const string URL = "https://example.com/content/mypage.aspx";

    IWebDriver driver;
    NgWebDriver ngDriver;

    [SetUp]
    public void Setup()
    {
        driver = new ChromeDriver();
        driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(10));
        ngDriver = new NgWebDriver(driver);
    }

    [TearDown]
    public void Teardown()
    {
        ngDriver.Quit();
    }

    [Test]
    public void Basic()
    {
        ngDriver.Url = URL;

        Assert.IsTrue(ngDriver.FindElement(By.CssSelector("#my")).Displayed);
    }
}

HTML スニペットは次のとおりです。

<kendo-button id="my" ng-click="myCtrl.doSomething()">Do Something</kendo-button>

Assert.IsTrue行に次のエラーが表示されます。

javascript error: [ng:test] http://errors.angularjs.org/1.3.15/ng/test
JavaScript stack:
Error: [ng:test] http://errors.angularjs.org/1.3.15/ng/test
    at Error (native)
    at https://example.com/AngularJS/1.3.15/angular.min.js:6:417
    at Object.Ld [as getTestability] (https://example.com/AngularJS/1.3.15/angular.min.js:18:468)
    at eval (eval at executeAsyncScript (unknown source), <anonymous>:10:13)
    at eval (eval at executeAsyncScript (unknown source), <anonymous>:18:5)
    at executeAsyncScript (<anonymous>:329:26)
    at <anonymous>:345:29
    at callFunction (<anonymous>:237:33)
    at <anonymous>:247:23
    at <anonymous>:248:3
  (Session info: chrome=49.0.2623.87)
  (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 6.1 SP1 x86_64) (UnexpectedJavaScriptError)

スタックトレースは次のとおりです。

   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScriptCommand(String script, String commandName, Object[] args)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteAsyncScript(String script, Object[] args)
   at Protractor.NgWebDriver.WaitForAngular() in c:\Users\Bruno\Projets\GitHub\bbaia\protractor-net\src\Protractor\NgWebDriver.cs:line 315
   at Protractor.NgWebDriver.FindElement(By by) in c:\Users\Bruno\Projets\GitHub\bbaia\protractor-net\src\Protractor\NgWebDriver.cs:line 262

Protractor と Selenium WebDriver Nuget パッケージしか入手できませんでした。他にインストールする必要があるものはありますか、それとも実際にはコードの問題ですか?

4

2 に答える 2

0

アサートの前に実際に URL に移動していませんか?

試す -

[Test]
public void Basic()
{
   NgDriver.Navigate().GoToUrl(URL);
   Assert.IsTrue(ngDriver.FindElement(By.CssSelector("#my")).Displayed);
}
于 2016-04-18T10:27:08.840 に答える
0

以下で共有した内容に基づいて、ドキュメントのルートを指定していないことが問題であることがわかりました。私のタグには、

data-ng-app='myApp'

分度器ドライバーを作成するコードは次のとおりです。

ngDriver = new NgWebDriver(driver, "[ng-data='myApp']"

Protractor-net は、この直接の CSS 検索基準を変更しないため、機能したのは次のとおりです。

ngDriver = new NgWebDriver(driver, "[data-ng-app='myApp']"

答えではありませんが、私にはコメントする能力がありません。

同じ問題が発生しています。さらに調査すると、NgWebDriver がインスタンス化されるときに例外がスローされることがわかります。オブジェクトを検査すると、作成されたオブジェクトの Location、PageSource、Title、および Url メンバーがすべて「'System.InvalidOperationException' 文字列 {System.InvalidOperationException} 型の例外をスローしました」と表示されます。例外は、要素を見つけようとしたときにのみテストにスローされます。

私のコードは次のようになります:

        public DefaultPOM(IWebDriver webDriver, string baseURL)
    {
        driver = webDriver;
        this.baseURL = baseURL;
        driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(10));
        driver.Navigate().GoToUrl(baseURL);
        ngDriver = new NgWebDriver(driver, "[ng-app='myApp']");
        ngDriver.Manage().Window.Maximize();
        ngDriver.Navigate().GoToUrl(baseURL);

    }

作成直後の ngDriver オブジェクトを検査すると、例外が表示されます。

ナビゲートする前に同期をオフにすると、例外を記録するドライバー オブジェクトの唯一のメンバーは場所です。

        ngDriver = new NgWebDriver(driver, "[ng-app='NCTWebPortal']");
        ngDriver.IgnoreSynchronization=true;
        ngDriver.Manage().Window.Maximize();
        ngDriver.Navigate().GoToUrl(baseURL);
        ngDriver.IgnoreSynchronization = false;
于 2016-11-10T14:27:14.730 に答える