Webdriver I / O - 获取链接

时间:2015-11-15 18:07:48

标签: javascript webdriver

我正在尝试使用Webdriver I / O测试网站。

var jasmine = require('jasmine');
var webdriverio = require('webdriverio');

var client = null;
var settings = {
    testAbilities: { desiredCapabilities: { browserName: 'phantomjs' } },
};

describe("Test", function() {
  it('Should load Successfully', function(done) {
  client = webdriverio.remote(settings.testAbilities).init()
  .url('http://www.example.com')
  .selectorExecute('//a', function(links) {
    return links;
  }).then(function(links) {
    for (var i=0; i<links.length; i++) {
      alert(JSON.stringify(links[i]));
    }

    done();
  });
});

当此测试运行时,我会在alert窗口中看到以下内容:

{"ELEMENT":"0"}

我期待一个链接。我如何获得锚标记?我想得到它的位置,以便我可以通过自动测试“点击”它。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用click直接点击元素并将其传递给选择器,无需先检索元素或其位置。如果您的选择器匹配多个元素,则会单击第一个元素。

此示例获取所有a个元素,点击第一个元素(恰好只有一个)并等待某个标题:

var options = {
    desiredCapabilities: { 
        browserName: "phantomjs" 
    }
};

describe("Test", function() {

    it("Should load Successfully", function(done) {

        webdriverio
            .remote(options)
            .init()
            .url("http://www.example.com")
            .click("a")
            .waitUntil(function() {
                return this.getTitle().then(function(title) {
                    return title === "IANA — IANA-managed Reserved Domains";
                });
            })
            .end()
            .then(done);

    }, 50000);
});

如果您确实想直接找到DOM元素或检索其位置,则应使用elementelements(或getLocation作为后者):

webdriverio
    .remote(options)
    .init()
    .url("http://www.example.com")
    .elements("p").then(function(elems){
        console.log(elems.value.length + " paragraph elements found");  
    })
    .getLocation("a").then(function(loc){
        console.log("link location: " + JSON.stringify(loc));   
    })
    .end();

selectorExecute更适用于执行javascript函数,将选择器的结果作为参数传递。