我是Angular JS应用程序测试的新手。我尝试过在线提供的示例Angular JS应用程序。
在网中探索后,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
请帮助和谢谢
答案 0 :(得分:2)
在查找元素之前,所需元素位于iframe
- switch to it's context内:
browser.switchTo().frame("preview-frame");
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();
preview-frame
是iframe
的名称。
您可能已经知道,您的AngularJS应用程序已加载到此iframe
中 - 这可能是您设置ignoreSynchronization
标记的原因。
我认为您可以测试您的应用程序而无需关闭同步并且根本需要调整ignoreSynchronization
标记 - data-ng-app
属性设置在body
内iframe
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的名称");
的更多信息browser.switchTo().frame("preview-frame");
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click();
希望这有帮助