量角器查找和单击元素

尼克斯

我有一个非常简单的设置。我需要能够找到一个链接并单击它。但是只要我找到它,click()我就会明白

StaleElementReferenceError:过时的元素引用:元素未附加到页面文档

有人可以向我解释我做错了吗?如果我通过css定位它,效果很好。只有当我使用量角器扩展时,它才会失败。页面上没有任何变化,我尝试了“ waitForAngular”以及长时间的超时。结果相同。

<li ng-click="getLocation(l)" class="" ng-repeat="l in location"  >
   <div class="location_name">{{ l.LocationID }} - {{l.LocationName}}</div>
</li>

var locations= element.all(
    by.binding('{{l.LocationName}}'))
    .each(function(item){
        item.getText().then(function(text){
            if(text == name){
                console.log("found", item);
                item.click()
                console.log("clicked")
                found = true;
            }
        });
    });

一个附加的优点是向我解释了如何使调试器工作。我正在使用最新版本的量角器(0.20.1)

无法打开端口5858上的套接字,等待1000毫秒,然后重试

前转储

StaleElementReferenceError: stale element reference: element is not attached to the page document
  (Session info: chrome=33.0.1750.146)
  (Driver info: chromedriver=2.9.248307,platform=Mac OS X 10.9.1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.40.0', revision: 'fbe29a9', time: '2014-02-19 20:54:28'
System info: host: '.home', ip: '192.168.1.2', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.1', java.version: '1.6.0_65'
Session ID: 935f7630f50d9b1b4c8da73261e54153
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/var/folders/qj/xvhg6hv5245cryry73wygbkw0000gn/T/.org.chromium.Chromium.b5z7Xe}, rotatable=false, locationContextEnabled=true, version=33.0.1750.146, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
   Stacktrace:
     Error
    at null.<anonymous> (/Users//work////selenium/spec/locationsSpec.js:21:3)
    at Object.<anonymous> (/Users//work////selenium/spec/locationsSpec.js:7:1)
At async task:
      StaleElementReferenceError: stale element reference: element is not attached to the page document
  (Session info: chrome=33.0.1750.146)
  (Driver info: chromedriver=2.9.248307,platform=Mac OS X 10.9.1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.40.0', revision: 'fbe29a9', time: '2014-02-19 20:54:28'
System info: host: '.home', ip: '192.168.1.2', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.1', java.version: '1.6.0_65'
Session ID: 935f7630f50d9b1b4c8da73261e54153
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/var/folders/qj/xvhg6hv5245cryry73wygbkw0000gn/T/.org.chromium.Chromium.b5z7Xe}, rotatable=false, locationContextEnabled=true, version=33.0.1750.146, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
==== async task ====
WebElement.getText()
    at element.(anonymous function) [as getText] (/Users//work////selenium/node_modules/protractor/lib/protractor.js:599:32)
    at /Users//work////selenium/helpers/locations.js:10:18
    at /Users//work////selenium/node_modules/protractor/lib/protractor.js:367:11
    at Array.forEach (native)
    at /Users//work////selenium/node_modules/protractor/lib/protractor.js:366:13
==== async task ====
asynchronous test function
尼克斯

我相信根本的问题getText是在调用时我正在浏览下面的代码块完成了我所需要的

LocationsPage.prototype.goTo = function(name) {
    var locations  = element.all(by.repeater('l in location'));
    expect(locations.count()).toNotBe(0);
    return locations.map(
            function(locationElement, index) {
              return {
                index: index,
                text: locationElement.getText()
              };
            }
    ).then(function(items) {
      _.each(items, function(item) {
        if (item.text == name) {
            console.log("clicking ", name)
            locations.get(item.index).click();
        };
      });
    });
}

*如果有人想举一个如何做更复杂/自定义承诺流程的例子,请在此处保留以下内容*

我找到解决方案,但方法却很复杂。希望有人可以帮助我简化这个过程。

我相信根本的问题getText是在调用时我正在浏览

LocationsPage.prototype.goTo = function(name){
    var locations  = element.all(by.repeater('l in location'));
    expect(locations.count()).toNotBe(0);
    return protractor.promise.createFlow(function(flow){
        var found;
        var locations  = element.all(by.repeater('l in location'));
        var searchPromise = protractor.promise.defer();
        flow.execute(function(){
            var idx = 0, found = -1;
            locations.each(function(item){
                var _idx = idx;
                if(found >= 0){
                    console.log("skipping")
                    return;
                }
                item.getText().then(function(text){
                    if(text == name){
                        console.log("setting found.")
                        found = _idx;
                    }
                    if(found >= 0 || _idx === locations.count()-1){
                         searchPromise.fulfill(found);
                    }
                });
                idx++;
            });
            return searchPromise.promise;
        })
        flow.execute(function(){
            var promise = protractor.promise.defer();
            searchPromise.then(function(idx){
                locations.get(idx).click().then(function(){
                    promise.fulfill(true);
                });

            })

            return promise.promise;
        });
    });

}

您会注意到那里protractor.promise.createFlow我必须使用其他一些东西,因为expects当我仅使用时我的位置无法正确解析protractor.promise.defer()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击元素-量角器

来自分类Dev

如何使用量角器按文本查找和单击表格元素?

来自分类Dev

如何使用量角器按文本查找和单击表格元素?

来自分类Dev

AngularJS量角器-使用Ng单击绑定在页面上查找元素

来自分类Dev

中继器的量角器单击元素

来自分类Dev

量角器在转发器中查找元素

来自分类Dev

如何单击量角器中的隐藏元素?

来自分类Dev

如何检查量角器是否不可单击某个元素?

来自分类Dev

量角器无法单击元素,但能够获取文本

来自分类Dev

量角器单击链接,但元素不可见?

来自分类Dev

量角器+角度误差-元素在点不可单击

来自分类Dev

量角器单击一系列元素

来自分类Dev

量角器等待isElementPresent并单击等待的元素失败

来自分类Dev

量角器单击元素仅在存在时

来自分类Dev

如何单击量角器中的隐藏元素?

来自分类Dev

无法在量角器中单击循环中的元素

来自分类Dev

量角器:按属性值查找隐藏的输入元素

来自分类Dev

量角器通过div中的标签查找元素

来自分类Dev

量角器-通过任何属性查找元素

来自分类Dev

单击基于文本和href属性量角器的链接

来自分类Dev

量角器获取元素的比例或比例宽度和高度

来自分类Dev

量角器获取元素的比例或比例宽度和高度

来自分类Dev

量角器 - 通过 className 和 text 定位元素

来自分类Dev

量角器:如何在单击按钮之前和之后比较同一Web元素的文本内容

来自分类Dev

当另一个元素等于量角器和茉莉花的特定输入时,单击转发器中的一个元素

来自分类Dev

当另一个元素等于量角器和茉莉花的特定输入时,单击转发器中的一个元素

来自分类Dev

单击表中的列-量角器

来自分类Dev

无法使用量角器单击父元素之外的元素

来自分类Dev

C#量角器-在另一个元素中查找元素

Related 相关文章

  1. 1

    单击元素-量角器

  2. 2

    如何使用量角器按文本查找和单击表格元素?

  3. 3

    如何使用量角器按文本查找和单击表格元素?

  4. 4

    AngularJS量角器-使用Ng单击绑定在页面上查找元素

  5. 5

    中继器的量角器单击元素

  6. 6

    量角器在转发器中查找元素

  7. 7

    如何单击量角器中的隐藏元素?

  8. 8

    如何检查量角器是否不可单击某个元素?

  9. 9

    量角器无法单击元素,但能够获取文本

  10. 10

    量角器单击链接,但元素不可见?

  11. 11

    量角器+角度误差-元素在点不可单击

  12. 12

    量角器单击一系列元素

  13. 13

    量角器等待isElementPresent并单击等待的元素失败

  14. 14

    量角器单击元素仅在存在时

  15. 15

    如何单击量角器中的隐藏元素?

  16. 16

    无法在量角器中单击循环中的元素

  17. 17

    量角器:按属性值查找隐藏的输入元素

  18. 18

    量角器通过div中的标签查找元素

  19. 19

    量角器-通过任何属性查找元素

  20. 20

    单击基于文本和href属性量角器的链接

  21. 21

    量角器获取元素的比例或比例宽度和高度

  22. 22

    量角器获取元素的比例或比例宽度和高度

  23. 23

    量角器 - 通过 className 和 text 定位元素

  24. 24

    量角器:如何在单击按钮之前和之后比较同一Web元素的文本内容

  25. 25

    当另一个元素等于量角器和茉莉花的特定输入时,单击转发器中的一个元素

  26. 26

    当另一个元素等于量角器和茉莉花的特定输入时,单击转发器中的一个元素

  27. 27

    单击表中的列-量角器

  28. 28

    无法使用量角器单击父元素之外的元素

  29. 29

    C#量角器-在另一个元素中查找元素

热门标签

归档