[javascript webdriverIO} select 具有多个节点的 Xpath 中的一个随机数
[javascript webdriverIO} select one random out of Xpath with multiple nodes
我正在尝试从具有多个节点的 Xpath 中获取一个随机节点。节点的数量是可变的,每周都会变化。我需要以下 2 个解决方案中的 1 个才能工作:
- 获取与此 Xpath 对应的节点数的返回值。这样我就可以用它来随机化它
- 另一个会给出相同结果的选项:随机给我一个,例如 25 个 Xpath。
我尝试以不同的方式解决这个问题。但 none 到目前为止一直有效。
我遇到了这个解决方案:
productCounter(){
let c = document.evaluate('count(//*[@itemtype]/*[@data-order-bacu])', document, null, XPathResult.ANY_TYPE, null);
console.log(c.numberValue);
}
它应该给我 Xpath 中的节点数,然后我可以使用它来随机化正确的节点数。但是因为我使用 webdriverIO 它会给出错误:
document is not defined
所以我尝试了一些不同的东西并使用了 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]',
好的,我找到了这个问题的答案:
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__submit' 在这种情况下我需要添加到路径中,因为每个 node/element 都有 4 个按钮
我正在尝试从具有多个节点的 Xpath 中获取一个随机节点。节点的数量是可变的,每周都会变化。我需要以下 2 个解决方案中的 1 个才能工作:
- 获取与此 Xpath 对应的节点数的返回值。这样我就可以用它来随机化它
- 另一个会给出相同结果的选项:随机给我一个,例如 25 个 Xpath。
我尝试以不同的方式解决这个问题。但 none 到目前为止一直有效。 我遇到了这个解决方案:
productCounter(){
let c = document.evaluate('count(//*[@itemtype]/*[@data-order-bacu])', document, null, XPathResult.ANY_TYPE, null);
console.log(c.numberValue);
}
它应该给我 Xpath 中的节点数,然后我可以使用它来随机化正确的节点数。但是因为我使用 webdriverIO 它会给出错误:
document is not defined
所以我尝试了一些不同的东西并使用了 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]',
好的,我找到了这个问题的答案:
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__submit' 在这种情况下我需要添加到路径中,因为每个 node/element 都有 4 个按钮