Как прочитать значения элементов и щелкнуть по времени - PullRequest
0 голосов
/ 13 февраля 2020

Так что в настоящее время я работаю над чтением элементов, и может сложиться ситуация, когда в теге будет указано пример:

<div class="stock-controller" style="transition: border-bottom 0.3s ease 0s, opacity 0.3s ease 0s;">
    <div class="message">
        <svg width="14" height="14" viewBox="0 0 14 14">
            <g fill="none" fill-rule="evenodd">
                <path fill="#E00751" d="M14 7A7 7 0 1 1 0 7a7 7 0 0 1 14 0z"></path>
                <path fill="#FFF" fill-rule="nonzero" d="M8.45 7.036L10.414 9 9 10.414 7.036 8.45 5.07 10.414 3.657 9l1.964-1.964L3.5 4.914 4.914 3.5l2.122 2.121L9.156 3.5l1.415 1.414L8.45 7.036z"></path>
            </g>
        </svg>Sorry, we only have 10000 of this product.</div> //Need to read here how many avaliable products
    <div class="quantity-input invalid">
        <button class="btn left" aria-label="Decrease"> //How many user have choose - how many in stock = amout of click time.
            <svg class="svg-icon" viewBox="0 0 24 24">
                <path fill-rule="evenodd" d="M7 11h10v2H7z"></path>
            </svg>
        </button>
        <input type="number" pattern="[0-9]*" min="0" max="10002" value="10002"> //Need to read how many we have choose
        <button class="btn right" aria-label="Increase" disabled="">
            <svg class="svg-icon" viewBox="0 0 24 24">
                <path fill-rule="evenodd" d="M13 17v-4h4v-2h-4V7h-2v4H7v2h4v4z"></path>
            </svg>
        </button>
    </div>
</div>

image

в основном мы есть 3 тега, чтобы посмотреть здесь. первый - проверить текст, чтобы увидеть, сколько товаров на складе, и в данном случае это 10000. Затем мы должны проверить, сколько товаров выбрал пользователь, а это 10002. Поэтому нам нужно использовать 10002-10000 = Нажмите это много пунктов на <button class="btn left" aria-label="Decrease">

То, что я сделал до сих пор:

it('Check descrease button', function (done) {

    let allBtns = element.all(by.className('stock-controller'));

    element.all(by.className('stock-controller')).each(function (element, index) {
        // Will print  Sorry, we only have 4 of this product., Sorry, we only have 10000 of this product.
        element.getText().then(function (text) {
            console.log(index, text);
        });
    });

    allBtns.count()
        .then(function (countElement) {

            console.log('Find decrease buttons: ', countElement)

            //for (let i = 0; i < countElement; i++) { // let variables are scoped to the immediate enclosing block denoted by { }
                //browser.executeScript("arguments[0].click();", allBtns.get(i).getWebElement())
                //browser.sleep(1000) // sleep 1s
              //}
        })
        .then(() => {
            done();
        })

});

Другая проблема заключается в том, что это может быть больше, чем 1 контроллер запаса. Это значит, что это может быть и c 5 контроллер запаса, но все они имеют одинаковые элементы, но разные товары на складе и выбор пользователя.

Итак, мой вопрос:

Как Могу ли я прочитать, сколько имеется стокового контроллера, а затем проверить, сколько раз мне нужно нажать кнопку уменьшения для каждого фондового контроллера?

Рабочий код:

it('Clicked all decrease button', function (done) {

    let allProds = element.all(by.css('div.stock-controller'));

    allProds.count()
    .then(function (cnt) { // amount of products

        for(let index=0;index<cnt;index++) {

            let section = allProds.get(index),

                // message string which include qty in stock
                stock_qty_str = section.element(by.css('div.message')).getText(),
                // user inputed qty 
                user_qty_str = section.element(by.css('input[type="number"]')).getAttribute('value'),
                // button Descrease
                btn_dec = section.element(by.css('button[aria-label="Decrease"]'));

            Promise.all([stock_qty_str, user_qty_str])
                .then(function(data){
                    // use RegExp to extract qty in stock
                    let group = data[0].trim().match(/^Sorry.*?(\d+)/)

                    if(group) {
                        let stock_qty = group[1] * 1,
                            user_qty = data[1].trim() * 1,
                            gap = user_qty - stock_qty; // click times of Decrease button

                        for (let i = 0; i < gap; i++) {
                            browser.executeScript("arguments[0].click();", btn_dec.getWebElement());
                        }
                    }
                })
        }

    })
    .then(()=>{
        done();
    })

});

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Попробуйте приведенный ниже код, дайте объяснение в строке

it('Click remove button', function (done) {

    let allProds = element.all(by.css('div.stock-controller'));

    allProds.count()
    .then(function (cnt) { // amount of products

        for(let index=0;index<cnt;index++) {

            let section = allProds.get(index),

                // message string which include qty in stock
                stock_qty_str = section.element(by.css('div.message')).getText(),
                // user inputed qty 
                user_qty_str = section.element(by.css('div.quantity-input input'))
                                      .getAttribute('value'),
                // button Descrease
                btn_dec = section.element(by.css('button[aria-label="Decrease"]'));

            Promise.all([stock_qty_str, user_qty_str])
                .then(function(data){
                    // use RegExp to extract qty in stock
                    let group = data[0].trim().match(/^Sorry.*?(\d+)/)

                    if(group) {
                        let stock_qty = group[1] * 1,
                            user_qty = data[1].trim() * 1,
                            gap = user_qty - stock_qty; // click times of Decrease button

                        for(let i=0;i<gap;i++) {
                            btn_dec.click();
                            browser.sleep(1000).then(function(){
                                console.log('Click Decrease button: ' + i + '/' + gap)
                            })
                        }
                    }
                })

        }

    })
    .then(()=>{
        done();
    })

});
0 голосов
/ 13 февраля 2020

Я не в транспортир, но в java я бы сделал список WebElements с xpath, как // div [@ class = 'stock-controller']

Тогда foreach для stock-контроллеров прочитайте сумму, чтобы нажать и сделать это.

Pseudocode:
    List stockcontrollers = findby.xpath(//div[@class='stock-controller')
foreach(item in stockcontrollers)
{
get.item
read amount to click
for(x<amount to click)
{click}
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...