使用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');
有办法解决这个问题吗?
答案 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"));