Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing Angularjs Application with Selenium

I am testing an angular js application

Link Angular js App

when i click on the UI Kit link on the web application i am getting the following error -

at demoaj.Ajapp.main(Ajapp.java:16) Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"html/body/div1/div1/aside/div/div/ul/li[2]/a"} Command duration or timeout: 51 milliseconds For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

I am new to this i did some research on this AngularJS

java Code

    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();

        }

}

I think it is not able to find the element because in angularjs the dom is not rendering. when i check the page source it does not display anything all things are hidden after doing some research on angularjs testing i have few question please help,

for Angular App testing.

  1. i think i have to use protractor? i guess
  2. if i use protractor i have to write code in javascript or jquery?
  3. if i use protractor can i write my code in java using eclipse ide or intellij?

Please Help,

Thanks in advance.

like image 325
Chaitanya Pujari Avatar asked Sep 14 '15 05:09

Chaitanya Pujari


2 Answers

Here are your answers -

  • Yes for AngularJS testing you need to use Protractor as it has inbuilt support to wait for Angular to load.
  • If you use Protractor, then you need to write code in JavaScript and not jquery.
  • If you use Protractor you cannot use Java as Protractor is built on top of Selenium WebDriverJS.

Advantage would be that you can write Javascript code (which is simpler than Java) to test your angular app and you don't have to worry about how the AngularJS works on your page. Only thing that might confuse you is using promises which is taken from WebdriverJS. Hope this helps.

like image 87
giri-sh Avatar answered Sep 28 '22 01:09

giri-sh


Here are some of the techniques I use to test my AngularJS Applications :

  1. Look into Karma framework. It is very good and has good documentation as well. https://karma-runner.github.io/0.8/plus/AngularJS.html
  2. If you're more into end-to-end testing please use Protractor as it is proven time and time again that it is the best. https://angular.github.io/protractor/#/
like image 38
Sunil L Avatar answered Sep 28 '22 00:09

Sunil L