[javascript webdriverIO}从Xpath中从多个节点中随机选择一个

时间:2018-06-26 13:16:43

标签: javascript selenium xpath webdriver-io

我正在尝试从具有多个节点的Xpath中获取一个随机节点。节点数是可变的,并且每周都会更改。我需要以下2个解决方案中的1个才能工作:

  1. 从与此Xpath对应的节点数中获取一个数字。这样我就可以用它来随机化
  2. 另一个将产生相同结果的选项:随机给我1个,例如25个Xpath。
我试图以不同的方式解决这个问题。但到目前为止,都没有成功。 我遇到了这个解决方案:

productCounter(){
        let c = document.evaluate('count(//*[@itemtype]/*[@data-order-bacu])', document, null, XPathResult.ANY_TYPE, null);
        console.log(c.numberValue);
}

它应该给我Xpath中的节点数,然后我可以用它来随机分配正确的节点数。但由于我使用webdriverIO,因此会出现错误:

  

文档未定义

因此,我尝试了一些不同的操作,并使用了webdriverIO的“ browser.elements”功能。但不确定是否有帮助。

productCounter(){ let a = browser.selectByIndex("//*[@itemtype]/*[@data-order-bacu]"); console.log (a); }

Console.log将给我类似的信息,请参阅下文。是否可以通过某种方式获得节点数?

{ sessionId: 'a45061ba0d9dfcf0b241877bb2951cc8',
  value:
   [ { ELEMENT: '0.5928327282420562-1',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-1',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 0 },
     { ELEMENT: '0.5928327282420562-2',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-2',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 1 },
     { ELEMENT: '0.5928327282420562-3',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-3',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 2 },
     { ELEMENT: '0.5928327282420562-4',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-4',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 3 },
     { ELEMENT: '0.5928327282420562-5',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-5',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 4 },
     { ELEMENT: '0.5928327282420562-6',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-6',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 5 },
     { ELEMENT: '0.5928327282420562-7',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-7',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 6 },
     { ELEMENT: '0.5928327282420562-8',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-8',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 7 },
     { ELEMENT: '0.5928327282420562-9',
       'element-6066-11e4-a52e-4f735466cecf': '0.5928327282420562-9',
       selector: '//*[@itemtype]/*[@data-order-bacu]',
       value: [Object],
       index: 8 } ],
  selector: '//*[@itemtype]/*[@data-order-bacu]',

1 个答案:

答案 0 :(得分:2)

哦,我找到了这个问题的旁遮普人:

randomCake(Option){
        let a = browser.elements("//*[@itemtype]/*[@data-order-bacu]");
        let random = Math.floor(Math.random()*a.value.length);
        browser.elementIdElement(a.value[random].ELEMENT.toString(), '.add-to-cart__submit').click();
        }
在这种情况下,

“添加到购物车__提交” 是我需要添加的额外路径,因为每个节点/元素都有4个按钮