[javascript WebDrivero}从具有多个节点的Xpath中随机选择一个

[javascript WebDrivero}从具有多个节点的Xpath中随机选择一个,javascript,selenium,xpath,webdriver-io,Javascript,Selenium,Xpath,Webdriver Io,我正在尝试从包含多个节点的Xpath中获取一个随机节点。节点的数量是可变的,每周都会发生变化。我需要以下两种解决方案中的一种才能工作: 获取与此Xpath对应的节点数。这样,我可以使用它来随机化它 另一个选项将给出相同的结果:随机给我1个,例如25个XPath 我试图用不同的方法来解决这个问题,但到目前为止没有一种方法奏效。 我遇到了这个解决方案: productCounter(){ let c = document.evaluate('count(//*[@itemtype]/

我正在尝试从包含多个节点的Xpath中获取一个随机节点。节点的数量是可变的,每周都会发生变化。我需要以下两种解决方案中的一种才能工作:

  • 获取与此Xpath对应的节点数。这样,我可以使用它来随机化它
  • 另一个选项将给出相同的结果:随机给我1个,例如25个XPath
  • 我试图用不同的方法来解决这个问题,但到目前为止没有一种方法奏效。 我遇到了这个解决方案:

    productCounter(){
            let c = document.evaluate('count(//*[@itemtype]/*[@data-order-bacu])', document, null, XPathResult.ANY_TYPE, null);
            console.log(c.numberValue);
    }
    
    它应该给我Xpath中的节点数,然后我可以使用它来随机化正确的节点数。但是由于我使用WebDrivero,它会给出错误:

    未定义文档

    所以我尝试了一些不同的方法,使用了WebDrivero的“browser.elements”功能,但我不确定这是否有用

    productCounter(){
    设a=browser.selectByIndex(“/*[@itemtype]/*[@data order bacu]”);
    console.log(a);
    }

    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]', {会话ID:'a45061ba0d9dfcf0b241877bb2951cc8', 价值: [{元素:'0.5928327280562-1', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-1’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:0}, {元素:'0.5928327280562-2', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-2’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:1}, {元素:'0.59283272420562-3', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-3’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:2}, {元素:'0.59283272420562-4', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-4’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:3}, {元素:'0.59283272420562-5', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-5’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:4}, {元素:'0.59283272420562-6', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-6’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:5}, {元素:'0.59283272420562-7', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-7’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:6}, {元素:'0.59283272420562-8', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-8’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:7}, {元素:'0.59283272420562-9', ‘元件-6066-11e4-a52e-4f735466cecf’:‘0.59283272420562-9’, 选择器:'/*[@itemtype]/*[@data order bacu]', 值:[对象], 索引:8}], 选择器:'/*[@itemtype]/*[@data order bacu]',
    好了,我找到了这个问题的答案:

    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();
            }
    

    “add-to-cart\uuuu submit”在本例中是我需要添加到路径中的一个额外按钮,因为每个节点/元素都有4个按钮。好了,我找到了这个问题的答案:

    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();
            }
    
    “add-to-cart\uuuu submit”在本例中是我需要添加到路径中的额外内容,因为每个节点/元素都有4个按钮