Webdriver I/O - 获取链接

Webdriver I/O - Get Links

我正在尝试使用 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 window 中看到以下内容:

{"ELEMENT":"0"}

我期待 link。我如何获得锚标签?我想获得它的位置,以便我可以通过我的自动化测试 "click" 它。

谢谢!

您可以直接使用 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 个元素或直接检索它们的位置,您应该对后者使用 element and elements (or 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 函数,将选择器的结果作为参数传递。