这里是我要测试的元素
<div id="console-modal" class="tab-item hide-item green-outline">
<p id="message-box"></p>
<button id="console-modal-button" class="white-button btn-md">close</button>
</div>
当发生某些操作时,我正在向<p>
添加一条消息,并将<div>
的显示设置为阻止。 在我对硒的测试中,我希望得到更新的<p>
元素中存在的消息。但它返回一个空字符串。
这是执行操作以更新<p>
元素
it('should fill the login form and submit', () => {
driver.findElement(By.id('username')).sendKeys('johnd');
driver.findElement(By.id('passwd')).sendKeys('12345');
return driver.findElement(By.id('inline-signin-button')).click();
});
这是我正在执行的测试,以测试#message-box
的内容。代替innerHTML
我也尝试了textContent
.此外,当我向<p>
元素添加一些文本时,测试能够获取内容,但在操作完成并显示框后,它不会获取更新的内容。
it('should find the auth error modal and close', () => {
driver.wait(until.elementLocated(By.id('console-modal')));
driver.findElement(By.id('message-box')).isDisplayed();
return expect(driver.findElement(By.id('message-box')).getAttribute('innerHTML')).to.eventually.equal('authentication fail! check your username and password')
driver.findElement(By.id('console-modal-button')).click();
});
我希望返回的值是<p>
元素的更新内容,但似乎它在元素仍处于隐藏状态时保留内容。有没有办法在显示元素时获取更新的文本内容。或者有没有办法在测试之前延迟执行,直到显示元素。
您可以使用下面的等待直到。
var pElement = driver.wait(until.elementLocated(By.xpath("//div[@id='console-modal'][not(contains(@class,'hide-'))]/p[@id='message-box']")));
我们正在等待,直到div
类名没有hide
,以确保显示块(这将确保 P 文本更新)