6

我正在测试一个角度 js 应用程序

链接Angular js 应用程序

当我单击 Web 应用程序上的 UI Kit 链接时,我收到以下错误 -

在 demoaj.Ajapp.main(Ajapp.java:16) 引起:org.openqa.selenium.NoSuchElementException: 无法定位元素:{"method":"xpath","selector":"html/body/div 1 / div 1 /aside/div/div/ul/li[2]/a"} 命令持续时间或超时:51 毫秒有关此错误的文档,请访问: http ://seleniumhq.org/exceptions/no_such_element.html

我是新手,我对这个 AngularJS 做了一些研究

java代码

    package demoaj;

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;

    public class Ajapp {

        public static void main(String[] args) throws InterruptedException {
        WebDriver d=new FirefoxDriver();
        d.manage().window().maximize();
        d.get("http://iarouse.com/demo/index.html?product=square");
        WebDriverWait wait = new WebDriverWait(d, 20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("html/body/div[1]/div[1]/aside/div/div/ul/li[2]/a"))).click();
        //d.findElement(By.xpath("html/body/div[1]/div[1]/aside/div/div/ul/li[2]/a")).click();

        }

}

我认为它无法找到元素,因为在 angularjs 中,dom 没有呈现。当我检查页面源代码时,它没有显示任何东西,在对 angularjs 测试进行一些研究后,所有东西都被隐藏了,我有几个问题请帮忙,

用于 Angular 应用程序测试。

  1. 我想我必须使用量角器?我猜
  2. 如果我使用量角器,我必须用 javascript 或 jquery 编写代码?
  3. 如果我使用量角器,我可以使用 eclipse ide 或 intellij 在 java 中编写代码吗?

请帮忙,

提前致谢。

4

3 回答 3

3

以下是你的答案——

  • 是的,对于 AngularJS 测试,您需要使用 Protractor,因为它具有等待 Angular 加载的内置支持。
  • 如果您使用 Protractor,那么您需要用 JavaScript 而不是 jquery 编写代码。
  • 如果你使用 Protractor,你就不能使用 Java,因为 Protractor 是建立在 Selenium WebDriverJS 之上的。

优点是您可以编写 Javascript 代码(比 Java 更简单)来测试您的 Angular 应用程序,您不必担心 AngularJS 在您的页面上的工作方式。唯一可能让您感到困惑的是使用取自 WebdriverJS 的 Promise 希望这可以帮助。

于 2015-09-14T07:09:20.287 回答
1

以下是我用来测试 AngularJS 应用程序的一些技术:

  1. 查看 Karma 框架。它非常好,也有很好的文档。 https://karma-runner.github.io/0.8/plus/AngularJS.html
  2. 如果您更喜欢端到端测试,请使用 Protractor,因为它一次又一次地被证明是最好的。 https://angular.github.io/protractor/#/
于 2016-03-10T05:42:37.677 回答
0

我认为 angular 已经渲染了你的元素并且 selenium 正在找到它,但它还不能点击。您可以通过获取元素的一些属性(即文本)来找到它。问题在于角度没有完成 $http 调用(可能是 $digest 循环)。一种认为您可以做的是等到 angular 完成挂起的 $http 请求,然后找到您想要的元素并调用 .Click() 。下面是我在 C# 中用于我们的测试项目的工作代码片段。

 new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(angularIsDoneLoading);
//Add the rest of your code in here(like finding element, clicking on it etc.)


         Func<IWebDriver, bool> angularIsDoneLoading = (IWebDriver drv) =>
                {
                    string ngFinishedAllRequests =
                         @"var injector = window.angular.element('body').injector();
                         var $http = injector.get('$http');
                         return ($http.pendingRequests.length === 0)";

                    return ((IJavaScriptExecutor)drv).ExecuteScript(ngFinishedAllRequests).ToString() == "True";
                };
于 2017-03-03T18:51:02.243 回答