我正在测试角度js应用程序
当我点击Web应用程序上的UI Kit链接时,我收到以下错误 -
at 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它无法找到该元素,因为在angularjs中dom不会渲染.当我检查页面源它没有显示任何东西被隐藏后对angularjs测试做一些研究我有几个问题请帮助,
用于Angular App测试.
请帮忙,
提前致谢.
我正在尝试使用 Protractor+Jasmine 为我的非 Angular 应用程序编写我的第一个测试。
我需要调用我的应用程序全局实例的 API 函数,获取结果并在测试中进行比较。该函数传入的参数之一是回调,数据准备好后立即调用。该函数的执行时间取决于应用程序的配置。
我尝试解析此回调函数内的 Promise 对象并在测试中处理它。这是我的代码的简化版本,它也不起作用。看起来脚本arguments[0].fulfill("Some data");从未执行,因为测试因超时而失败,并显示消息:
等待规范完成 10000 毫秒后超时
describe('Text', function() {
it('should be displayed on stage with set value', function() {
var deferred = protractor.promise.defer();
var promise = deferred.promise;
promise.then(function (data) {
console.log(data);
});
browser.driver.executeScript('arguments[0].fulfill("Some data");', deferred);
});
});
Run Code Online (Sandbox Code Playgroud)
是否有可能在函数上下文中解析(履行)一个 Promise 对象executeScript()?还有其他方法可以处理这个问题吗?
UPD:这段代码对我有用。谢谢!
describe('Text', function() {
it('should be displayed on stage with set value', function() {
var deferred = protractor.promise.defer();
browser.driver.executeAsyncScript(function () {
var callback = arguments[arguments.length - …Run Code Online (Sandbox Code Playgroud) javascript jasmine selenium-webdriver protractor webdriverjs
我对量角器和Javascript / Node.js非常陌生。我有一个要求,我需要获取特定元素的屏幕截图并在茉莉花报告中显示相同的图片(请注意,报告中显示的屏幕截图不应包含整个网页,而应仅包含Web元素的快照我们正在尝试在页面中查找。)
这是我在堆栈溢出中找到的示例代码。但我不能接受相同的内容,因为它需要整个页面的屏幕截图。
testpage.takesnap = function(elementLocator,screenshotName){
var test1 = element(by.xpath(elementLocator)).getSize().then(function(size){
element(by.xpath(elementLocator)).getLocation().then(function(location) {
browser.takeScreenshot().then(function(data) {
var base64Data = data.replace(/^data:image\/png;base64,/, "");
fs.writeFile(screenshotFilePath+screenshotName, base64Data, 'base64', function(err) {
if (err) {
console.log(err);
}
else {
test.cropInFile(size, location, screenshotFilePath+screenshotName);
}
doneCallback();
///////////////
});
});
});
});
console.log('Completed taking screenshot');
};
testpage.cropInFile = function(size, location, filePath) {
easyimg.crop({
src: filePath,
dst: filePath,
cropwidth: size.width,
cropheight: size.height,
x: location.x,
y: location.y,
gravity: 'North-West'
},
function(err, stdout, stderr) {
if (err) throw err;
});
};
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,但仍然需要整个网页的快照。
我听不懂 …
我正在使用以下代码
element(by.xpath("//tf-navpane-item[contains(@class,'tf-state-selected')]//tf-navpane-item-text//*[contains(@class,'ng-binding')]")).then(function(ele){
ele.getText().then(function(txt){
console.log("txt: "+txt);
});
});
Run Code Online (Sandbox Code Playgroud)
当我使用Protractor 1.0时,此代码用于正常工作.将Protractor升级到3.2.1后,我开始出现以下错误.
TypeError:element(...).那么它不是一个函数
我可能会遗漏一些东西但不确定是什么.
量角器使用WebDriverJS.
WebDriverJS使用"控制流"的概念来确保以预期的确定性顺序执行异步任务.
所以以下内容将按预期工作:
myElement.click();
browser.executeScript(...);
Run Code Online (Sandbox Code Playgroud)
但是,如果我向浏览器中的其中一个函数返回的承诺添加一个函数,那么一切都会以预期的方式继续工作吗?
例如:
browser.executeScript(...).then(function() {
browser.navigate(...);
});
Run Code Online (Sandbox Code Playgroud)
用上面的代码保持控制流程吗?
我有以下 mocha 测试用例,我试图最后打印 webdriver 日志,但它返回一个空数组。即使我将“浏览器”作为参数传递给 logs().get(),结果也是一样的。有人可以告诉我为什么日志是空的吗?
it('should open a url', function(done){
var By = nemo.wd.By;
driver.manage().logs();
driver.get("http://www.google.com");
driver.findElement(By.name('q')).sendKeys("webdriver");
driver.findElement(By.name('btnG')).click()
driver.manage().logs().get('driver').then(function(logs){
console.log(logs);
done();
});
});
Run Code Online (Sandbox Code Playgroud) phantomjs可以在iFrame中执行getText()或enterText()等操作吗?我正在使用量角器进行测试.Phantomjs可以在默认框架中执行操作,但在iframe内部定位器会超时.有什么建议?
javascript phantomjs selenium-webdriver protractor webdriverjs
我试图弄清楚WebDriverJs中的循环如何与promises一起工作.
假设你有以下html:
<div id="textelements">
<span onclick="spanClicked('Rock')">Rock</span>
<span onclick="spanClicked('Paper')">Paper</span>
<span onclick="spanClicked('Scissors')">Scissors</span>
</div>
Run Code Online (Sandbox Code Playgroud)
使用WebDriverJs我想找到带有文本'Scissors'的跨度并单击它.
最简单的方法是确保源html具有适当的标识符,但是说无法更改,给定上面的html,WebDriverJs代码会是什么样子.
我尝试过以下方法:
function clickElementWithText(driver, textValue) {
driver.findElements(webdriver.By.css('#textelements span')).then(function(spans) {
for (var i = 0; i < spans.length; i++) {
var matched = spans[i].getText().then(function(text) {
console.log('Text value is: ' + text);
return text === textValue;
});
console.log(matched);
if (matched === true) {
console.log('clicking!');
spans[i].click();
return;
}
}
});
}
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
driver.get('http://webdriverjsdemo.github.io/');
clickElementWithText(driver, 'Scissors');
Run Code Online (Sandbox Code Playgroud)
问题是匹配true在评估时不相等,即使它应该被设置为true.
有什么想法发生了什么?
webdriverjs ×8
javascript ×7
protractor ×6
selenium ×3
angularjs ×2
jasmine ×1
java ×1
phantomjs ×1