标签: webdriverjs

使用Selenium测试Angularjs应用程序

我正在测试角度js应用程序

链接Angular js App

当我点击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测试.

  1. 我想我必须使用量角器?我猜
  2. 如果我使用量角器我必须在javascript或jquery中编写代码?
  3. 如果我使用量角器,我可以使用eclipse ide或intellij在java中编写我的代码吗?

请帮忙,

提前致谢.

java selenium angularjs protractor webdriverjs

6
推荐指数
1
解决办法
6220
查看次数

是否可以解决“executeScript”中的承诺?

我正在尝试使用 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

5
推荐指数
1
解决办法
5138
查看次数

使用量角器工具使用特定元素定位器捕获图像

我对量角器和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)

我没有收到任何错误,但仍然需要整个网页的快照。

我听不懂 …

javascript selenium angularjs protractor webdriverjs

5
推荐指数
1
解决办法
854
查看次数

TypeError:element(...).那么它不是Protractor 3.2.1中的函数

我正在使用以下代码

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(...).那么它不是一个函数

我可能会遗漏一些东西但不确定是什么.

javascript selenium-webdriver protractor webdriverjs

4
推荐指数
1
解决办法
5817
查看次数

WebDriverJS控制流程

量角器使用WebDriverJS.

WebDriverJS使用"控制流"的概念来确保以预期的确定性顺序执行异步任务.

所以以下内容将按预期工作:

myElement.click();
browser.executeScript(...);
Run Code Online (Sandbox Code Playgroud)

但是,如果我向浏览器中的其中一个函数返回的承诺添加一个函数,那么一切都会以预期的方式继续工作吗?

例如:

browser.executeScript(...).then(function() {
  browser.navigate(...);
});
Run Code Online (Sandbox Code Playgroud)

用上面的代码保持控制流程吗?

javascript protractor webdriverjs

3
推荐指数
1
解决办法
742
查看次数

WebdriverJS:driver.manage().logs().get('browser') 返回空数组

我有以下 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)

javascript selenium-webdriver webdriverjs

3
推荐指数
1
解决办法
4960
查看次数

使用带有量角器的phantomjs访问iframe中的web元素

phantomjs可以在iFrame中执行getText()或enterText()等操作吗?我正在使用量角器进行测试.Phantomjs可以在默认框架中执行操作,但在iframe内部定位器会超时.有什么建议?

javascript phantomjs selenium-webdriver protractor webdriverjs

2
推荐指数
1
解决办法
858
查看次数

如何遍历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.

有什么想法发生了什么?

javascript selenium webdriverjs

1
推荐指数
1
解决办法
2012
查看次数