[javascript webdriverIO} выберите один случайный из Xpath с несколькими узлами - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь получить один случайный узел из Xpath с несколькими узлами. количество узлов является переменным и меняется каждую неделю. Мне нужно 1 из следующих 2 решений для работы:

  1. возвращает число назад числа узлов, соответствующих этому Xpath. таким образом, я могу использовать его, чтобы рандомизировать его
  2. другой вариант, который даст тот же результат: дайте мне 1 из 25 случайных путей, например.

Я пытался решить эту проблему по-разному. но никто не работал до сих пор. Я наткнулся на это решение:

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

Он должен дать мне количество узлов в Xpath, которое я затем мог бы использовать, чтобы рандомизировать правильное количество узлов. но так как я использую webdriverIO, это выдаст ошибку:

документ не определен

Так что я попробовал что-то другое и использовал функцию «browser.elements» webdriverIO. но не уверен, поможет ли это.

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 голосов
/ 28 июня 2018

ОК, я нашел ответ на этот вопрос:

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' был в этом случае дополнительным мне нужно было добавить к пути, так как каждый узел / элемент имеет 4 кнопки

...