通过WebDriver循环链接

Looping through links via WebDriver

本文关键字:链接 循环 WebDriver 通过      更新时间:2023-09-26

我目前正在通过WebDriver I/O测试一个网页。我希望能够选择一对夫妇的链接和"点击"他们。目前,我有以下内容:

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();   
    })
  ;
}); 

当我执行这个测试时,我在控制台窗口中看到以下内容:

{ 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' }

我的问题是,我如何"点击"链接?当我打印出链接时,我期望看到一个ID、一个href、一个xpath或某种引用链接的方式。但是我什么也没看到。当我查看文档时,它们提到元素作为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)进行端到端测试。它不需要Angular,而且可以让你的测试生活变得轻松很多。