1

考虑到我有多个 tr,我想选择一个并通过单击绑定到它的编辑按钮来编辑其中的值。

我正在做这样的事情:

browser.elements('css selector', '#someId  tr', elements => {
  elements.value.forEach(val => {
    console.log(val)
  }

我得到这样的东西:

{
  'abcd-1234-qwer-0987': 'some id'
},
{
  'abcd-1234-qwer-0987': 'some other id'
}
  1. 'abcd-1234-qwer-0987'到底是什么,这个会话 id 是什么东西,它会改变吗?
  2. 获取特定元素的最佳方式是什么?因为我猜我的方法是错误的:elements.value[1]['abcd-1234-qwer-0987']
4

3 回答 3

2

当我运行browser.elements并记录elements.value数组中的条目时,我得到类似{ ELEMENT: '5' }. 所以,回答你的问题:

  1. 'abcd-1234-qwer-0987'到底是什么,这个会话 id 是什么东西,它会改变吗?

可能是某种会话 ID,但我不确定。不管它是什么,你不需要它来做你正在做的事情。

  1. 获取特定元素的最佳方式是什么?

如果我试图从几个类似的元素中选择一个,我的代码最终看起来像这样:

browser.elements('css selector', '#someId', result => {
  // index is defined somewhere else
  browser.elementIdClick(result.value[index].ELEMENT, () => {
    // whatever you want to do after you click the element.
  });
});

如果这对您不起作用,您能否分享您正在运行的操作系统和浏览器,以及您的 nightwatch 配置文件?

于 2019-12-06T17:30:41.440 回答
1

它返回的元素项是 Web Element json 对象。一个 Web 元素 ID

https://nightwatchjs.org/api/commands/#elements

1.'abcd-1234-qwer-0987'到底是什么,这个会话ID是什么东西,它会改变吗?

是的,它会根据 Session 改变

2.获取特定元素的最佳方式是什么

参考以下

使用 Nightwatch,如何从 ELEMENT 实体中获取 DOM 元素及其属性?

browser.elements('css selector', '#someId  tr', elements => {
 console.log(elements);
elements.value.forEach(element =>{
let key = Object.keys(element)[0];
let ElementIDvalue = element[key];
console.log("key = ",  key);
console.log("WebElementIDvalue = ", ElementIDvalue);
})
});
于 2019-12-04T09:26:24.010 回答
0

我发现的所有关于您尝试做的文档都说我应该能够使用obj.ELEMENT,但他们没有说的是它需要w3c在您的夜间配置中设置为 false。

带有上下文的示例:

  test_settings: {
    default: {
      end_session_on_fail: false,
      disable_error_log: false,
      launch_url: 'http://localhost:3000',

      desiredCapabilities : {
        browserName : 'chrome',
        'goog:chromeOptions' : {
          // More info on Chromedriver: https://sites.google.com/a/chromium.org/chromedriver/
          //
          // w3c:false tells Chromedriver to run using the legacy JSONWire protocol (not required in Chrome 78)
          w3c: true,
          args: [
            '--auto-open-devtools-for-tabs',
            //'--no-sandbox',
. . .

这是我如何使用它的示例:

    .elements('css selector', `${targetNodeSelector} #nodeCard`, nodeContents => {
      console.log(nodeContents.value)
      nodeContents.value.forEach(nodeContent => {
        console.log(nodeContent.ELEMENT)
        // browser.elementIdText(nodeContent.ELEMENT, function (result) {
        //   console.log('\n' + result.value)
        // })
      })
    })

这将显示正确的键/值:

[
  { ELEMENT: '0.944080972569816-108' },
  { ELEMENT: '0.944080972569816-109' },
  { ELEMENT: '0.944080972569816-110' },
于 2022-02-01T00:40:55.583 回答