2017-01-19 63 views
1

我有一個測試應用程序,它有一個iFrame,其中Angular應用程序被注入。我的測試套件是在Java Selenium中,我發現操作角度應用程序內的控件非常困難。有沒有辦法一起使用量角器和硒?

我已經單獨使用了量角器和硒,但是這種情況下,我發現很難得到解決方案。

我的問題是:

  1. 有沒有一種方法,我可以等角度完全載入之前,我可以切換到iframe和硒純粹的操縱控制?
  2. 如果沒有,有沒有辦法或任何人有任何工作,只有角度的應用程序部分,我們可以使用量角器腳本? (基本上我問的是量角器和硒套裝是否可以並駕齊驅?)

任何幫助非常感謝。

+0

看一看 - http://stackoverflow.com/questions/25062969/testing-angularjs-with-selenium的http://計算器.com/questions/38621451/selenium-and-angularjs-wait-until-do-do-some-actions – Grasshopper

回答

1

我們也在使用Selenium & java自動化Angularjs應用程序。我們已經寫我們自己的同步,並等待加載函數如下:

public void Sync() 
     { 
      //waitForLoading(); 
      try 
      { 
      JavascriptExecutor js = (JavascriptExecutor)driver; 
      WebDriverWait wait = new WebDriverWait(webDriver, 300);//timeoutInSeconds 
      wait.Until(js.executeScript("return document.readyState").toString().equals("complete")); 
       Thread.sleep(4000); 

      } 
      catch 
      { 
       Thread.sleep(16000); 
      } 
     } 


//Another version of the same function based on time based polling to make it more dynamic 
public void checkPageIsReady() { 

    JavascriptExecutor js = (JavascriptExecutor)driver; 


    //Initially bellow given if condition will check ready state of page. 
    if (js.executeScript("return document.readyState").toString().equals("complete")){ 
    System.out.println("Page Is loaded."); 
    return; 
    } 

    //This loop will rotate for 25 times to check If page Is ready after every 1 second. 
    //You can replace your value with 25 If you wants to Increase or decrease wait time. 
    for (int i=0; i<25; i++){ 
    try { 
    Thread.sleep(1000); 
    }catch (InterruptedException e) {} 
    //To check page ready state. 
    if (js.executeScript("return document.readyState").toString().equals("complete")){ 
    break; 
    } 
    } 
} 
+0

謝謝發佈你的答案。但是,有一個問題 - 您將硒用於角度應用程序的自動化是什麼? –

+0

我不會推薦這麼做。如果它是angularJS,那麼你應該只去量角器。在我們的案例中,選擇這一點有一些商業原因。 –

+0

但是我不明白爲什麼我們必須使用JavaScript作爲量角器中的語言。我希望能用ruby或python移植Protractor。 –

相關問題