在phantomjs中使用量角器运行angularjs e2e测试的问题

时间:2014-08-06 04:35:43

标签: angularjs phantomjs protractor

使用Protractor和PhantomJS进行E2E测试并执行

之类的操作
expect(element(by.repeater('book in library') row(0).column('{{book.name}}')).getText()).toBe('Some Text');

仅在PhantomJS中失败,但在Firefox或Chrome中失败。

HTML

<div>
  <ui tabset> 
    <li tab ng-repeat="book in library track by id"> 
      <span tab-heading>{{book.name}}</span>      
      <div ui-view="test"></div>
    </li>
  </ui>
</div>

量角器E2E测试案例:

 it('test', function () {
  var bookName = element(by.repeater('book in library track by id').row(0).column('{{book.name}}'));
  expect(bookName.getText()).toEqual('test');
 });

我正在使用angularjs 1.2.14,量角器:1.0.0-rc4,phantomjs:1.9.7-14在linux上 此测试用例在Chrome和Firefox中运行良好,但在PhantomJS中失败,我得到的错误是

 Error:Expected '' to equal 'test'

当我指望行工作正常但尝试获取列值时,我得到空字符串。

// works fine:
expect(element.all(by.repeater('book in library track by id')).count()).toEqual(9); 
// test fails:
expect(bookName.getText()).toEqual('test');

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这似乎是WebDriver已知的行为。在非可见元素上调用WebDriver方法时,getText()返回空字符串。而且,有时,即使元素是可见的,它仍然返回一个空字符串。

我在this other StackOverflow question找到了几个解决方案,但没有一个对我有用(Selenium,PhantomJS和ZK应用程序)。 innerText属性也是空的。

我找到了解决方案here。诀窍是使用textContent属性,当getText()返回空字符串时返回预期值。

WebElement div = driver.findElement(By.xpath("//div[@id='myDiv']"));
assertEquals("expectedtext", div.getAttribute("textContent"));