代码之家  ›  专栏  ›  技术社区  ›  Rahadian Kumang

WebDriverio元素IDHTML?

  •  0
  • Rahadian Kumang  · 技术社区  · 5 年前

    如何从 elementId 使用浏览器对象?

    有什么像 elementIdHtml 在webdriverio api中可用?

    这个 getHTML 链接用于 V4 正在回归 403禁止 .


    我的目标是我需要把所有的文字都写进去 a._3cnp 从元素id

    示例HTML

    <div class="container">
        <a class="_3cnp">first link</a>
        <a class="_3cnp">second link</a>
        <a class="_3cnp">third link</a>
    </div>
    

    需要将其转换为[“第一个链接”,“第二个链接”…]

    我有 .container 元素ID已存在

    我就是这么做的

    .then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
    .then(buttonElem => {
        console.log('->', buttonElem)
        console.log('-->', buttonElem.getHTML)
        buttonElem.getHTML().then(x => console.log('---->', x))
        return buttonElem.value
    })
    

    元素元素的结果是 钮扣

    { sessionId: '2e2f144c8895a03da1b8df92f4613a33',
      status: 0,
      value:
       [ { ELEMENT: '0.6603119466268468-24',
           'element-6066-11e4-a52e-4f735466cecf': '0.6603119466268468-24' } ],
      selector: 'a._3cnp' }
    

    但是 buttonElem.getHTML undefined

    IM使用来自Botium Webdririo连接器的Webdririo Standalone

    0 回复  |  直到 5 年前
        1
  •  1
  •   iamdanchiv    5 年前

    乐:

    相应地更改代码如下:

    .then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
    .then(buttonElem => {
        // buttonElem's 'value' will contain a list of all the matching elements
        // thus, you have to call getHTML() on each item from 'value'
    
        // the following will return the HTML of the first matching element
        console.log('\nPrint element HTML: ' + buttonElem.value[0].getHTML());
        return buttonElem.value[0].getHTML();
    })
    

    更好的方法是在它们之间循环并打印HTML:

    .then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
    .value.forEach(buttonElem => {
    
        console.log('\nPrint element HTML: ' + buttonElem.getHTML());
        return buttonElem.getHTML();
    })
    

    这个 .getHTML() 属性的作用域为 ELEMENT 物体。为了更多的教学方法,我要考虑的任务是 操作HTML代码 在一系列列表项中找到( <li> ),来自AM无序列表( <ul> )

    因此您可以执行以下操作:

    • browser.getHTML('ul.ourList li.ourListItems') ( 这将返回所有 <理工大学; 的HTML代码 )
    • browser.element('ul.ourList li.ourListItems').getHTML() ( 这将返回第一个 <li>'s HTML代码 )
    • $('ul.ourList li.ourListItems').getHTML() ( 这相当于上面的命令,只是一个放松的版本 )

    如果需要遍历所有 <理工大学; 获取HTML,请执行以下操作:

    let locator = 'ul.ourList li.ourListItems';
    
    browser.elements(locator).value.forEach(elem => {
      let elemHTML = elem.getHTML();
    
      console.log( JSON.stringify(elemHTML) );
      elemHTML.doSomethingWithIt();
    })
    

    在哪里? elem will是具有以下格式的对象:

    { ELEMENT: '0.285350058261731-1',
      'element-6066-11e4-a52e-4f735466cecf': '0.285350058261731-1',
      selector: 'ul li.fw-item.fz-16.lh-36.pos-r',
      value: { ELEMENT: '0.285350058261731-1' },
      index: 0 
    }