通过 WebDriver 循环访问链接

Looping through links via WebDriver

我目前正在通过 WebDriver I/O 测试网页。我希望能够 select 几个 link 和 "click" 它们。目前,我有以下内容:

it('Should click links', function(done) {
  client
    .elements('a').then(function(links) {
      console.log(links);
      console.log('---------');

      for (var i=0; i<links.value.length; i++) {
        client.getAttribute(links.value[i].ELEMENT)
      }

      expect(true).toBe(true);
      done();   
    })
  ;
}); 

当我执行此测试时,我在控制台中看到以下内容 window:

{ state: 'success',
  sessionId: '85d25e09-13d8-475a-81b6-87431d2d8f3c',
  hCode: 1234567890,
  value: 
   [ { ELEMENT: '0' },
     { ELEMENT: '1' },
     { ELEMENT: '2' } ],
  class: 'org.openqa.selenium.remote.Response',
  status: 0 }
---------
{ ELEMENT: '0' }
{ ELEMENT: '1' }
{ ELEMENT: '2' }

我的问题是,我如何"click" link?当我打印出 link 时,我希望看到一个 ID、一个 href、一个 xpath 或某种引用 link 的方式。但我什么也没看到。当我查看 docs 时,他们提到元素作为 WebElement JSON 对象返回。但是,我似乎无法在 WebElement 上找到任何文档。

我错过了什么?

你告诉它点击元素,就像文档说的那样:http://webdriver.io/api/action/click.html

在您的情况下,代码类似于:

it('Should click links', function(done) {
  client
    .elements('a').then(function(links) {
      console.log(links);
      console.log('---------');

      for (var i=0; i<links.value.length; i++) {
        client.click(links[i])
      }

      expect(true).toBe(true);
      done();   
    })
  ;
}); 

您的代码可能会有所不同,但这应该可以帮助您入门。现在,有几点要点:

1) 你应该避免在一个测试中有多个断言。它违反了 OAPT 并且会使您的测试在失败时更难被发现。

2) 您可以查看 Protractor (http://www.protractortest.org) 进行 E2E 测试。它不需要 Angular,它可以使您的测试生活更轻松。