无法使用Protractor

时间:2015-11-03 12:12:43

标签: angularjs selenium protractor

我是Angular JS应用程序测试的新手。我尝试过在线提供的示例Angular JS应用程序。

链接:Angular JS application

在网中探索后,Protractor是测试AngularJS的最佳方法。我已尝试使用以下代码在上面的链接中查找元素。 Itried与所有可能的定位器,但无法捕获任何web元素。

量角器版本:2.5.1

代码:

describe('angularjs homepage', function() {

  it( 'should load the home page', function() {
      browser.ignoreSynchronization = true
      browser.get('http://themeforest.net/item/square-responsive-admin-app-with-angularjs/full_screen_preview/7511722');
      browser.driver.manage().window().maximize()
      browser.sleep(6000);
      element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();
  });
});

配置文件::

exports.config = {
    //The address of a running selenium server.
  seleniumAddress: 'http://localhost:4444/wd/hub',
 //Here we specify the name of the specs files.
  specs: ['testspec.js']
}

错误:

 1) angularjs homepage should load the home page
   Message:
     NoSuchElementError: No element found using locator: By.xpath(".//*[@id=\"na
v\"]/li[2]/a")
   Stacktrace:
     NoSuchElementError: No element found using locator: By.xpath(".//*[@id=\"na
v\"]/li[2]/a")
    at new bot.Error (C:\Users\CP042756\AppData\Roaming\npm\node_modules\protrac
tor\node_modules\selenium-webdriver\lib\atoms\error.js:108:18)
    at C:\Users\CP042756\AppData\Roaming\npm\node_modules\protractor\lib\element
.js:694:15
    at Array.forEach (native)
    at goog.async.run.processWorkQueue (C:\Users\CP042756\AppData\Roaming\npm\no
de_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:130:
15)
    at process._tickCallback (node.js:356:9)
Error

请帮助和谢谢

2 个答案:

答案 0 :(得分:2)

在查找元素之前,所需元素位于iframe - switch to it's context内:

browser.switchTo().frame("preview-frame"); 
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();

preview-frameiframe的名称。

您可能已经知道,您的AngularJS应用程序已加载到此iframe中 - 这可能是您设置ignoreSynchronization标记的原因。

我认为您可以测试您的应用程序而无需关闭同步并且根本需要调整ignoreSynchronization标记 - data-ng-app属性设置在bodyiframe 1}}。如果您直接转到加载iframe的网址,protractor会自动检测您的AngularJS应用程序并同步使用它:

it('should load the home page', function() {
  browser.get('http://iarouse.com/dist-square/v2.0.1/index.html');
  browser.driver.manage().window().maximize();

  element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();
});

答案 1 :(得分:0)

您的元素位于iframe内部,在您尝试单击此链接之前,您必须使用browser.switchTo()。frame切换到iframe("您的IFRAME的名称");

有关Selenium Iframe

的更多信息
browser.switchTo().frame("preview-frame"); 
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();

希望这有帮助