【问题标题】:problems running angularjs e2e testing with protractor in phantomjs在phantomjs中使用量角器运行angularjs e2e测试的问题
【发布时间】:2014-11-29 01:07:57
【问题描述】:

在使用 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>

Protractor 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');
 });

我在 linux 上使用 angularjs 1.2.14, protractor:1.0.0-rc4, phantomjs:1.9.7-14 这个测试用例在 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');

有没有办法解决这个问题?

【问题讨论】:

  • 听起来像 phantomjs 相关的问题吗?您应该 submit it 使用标签 phantomjs problem ;)

标签: angularjs phantomjs protractor


【解决方案1】:

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

我在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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多