javascript – 等待元素更改其值(文本)

前端之家收集整理的这篇文章主要介绍了javascript – 等待元素更改其值(文本)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在第三天和Protractor一起工作时,我经常会在等待页面加载和元素出现方面碰到金砖墙.特别是这个测试案例变得丑陋,我想解决问题而不必依赖睡眠.

我目前“在AngularJS之外”

  1. it('it should reflect in both the field and the title when the personnel name is changed',function() {
  2. var inputField,personnelHeader,personnelName;
  3. personnelName = element(By.css(".overlay.editnameoverlay")).click();
  4. personnelHeader = element(By.id("personnel_name_header"));
  5. inputField = element(By.css("input[name='newvalue']"));
  6. inputField.clear();
  7. inputField.sendKeys("Test 123");
  8. element(By.css("input[name='ok_button']")).click();
  9. // browser.driver.sleep(2000); This test only works with this sleep added
  10. browser.wait(function() {
  11. console.log("Waiting for header to change...");
  12. return personnelHeader.getText().then(function(text) {
  13. return text === "Test 123";
  14. });
  15. },5000);
  16. return expect(personnelHeader.getText()).toBe(personnelName.getText());
  17. });

因此,此处的测试会更改输入字段中的名称.提交它并等待更改反映在模态的标题中.问题是如果没有browser.driver.sleep(2000),我会收到错误消息

  1. Stacktrace:
  2. StaleElementReferenceError: stale element reference: element is not attached to the page document

在这种特殊情况下,我该如何解决这个问题?

解决方法

Expect Conditions的文档:
  1. var EC = protractor.ExpectedConditions;
  2. // Waits for the element with id 'abc' to contain the text 'foo'.
  3. browser.wait(EC.textToBePresentInElement($('#abc'),'foo'),5000);

猜你在找的JavaScript相关文章