2015-09-15 4 views
1

У меня есть страница, которая имеет элементы, которые становятся видимыми при прокрутке вниз. Я пытаюсь выполнить тест, чтобы убедиться, что элементов нет, пока прокрутка не окажется в нижней части элементов, но я не могу понять, как передать размер с одного вызова (elementIdSize()) на смещение прокрутки следующего звонка (scroll()). По общему признанию, мой мозг еще не получил концепцию «обещаний» прошлых простых цепочек вызовов.Перемещение в нижней части элемента с помощью Webdriver.io

Я пытался что-то вроде этого:

this.browser 
    .setViewportSize({width: 1000, height: 600}) 
    .element(selector) 
    .then(function(e) { 
     console.log('then element: ', e); 
     element = e; 
    }) 
    .elementIdSize(element.id) 
    .then(function(size) { 
     console.log('Size: ', size); 
    }) 
    .call(callback); 

который я надеялся, что будет использовать переданное в селектор, чтобы получить элемент, установите элемент в then(), а затем вызвать elementIdSize() на ID элемента, но var element никогда не устанавливается из вызова element(), и объекты, которые я возвращаю, по-видимому, не являются тем, что я пытаюсь получить в любом случае. Я чувствую, что это простая часть знаний, которую я здесь отсутствует, что сделает все это «щелчком».

Я использую API here для поиска вызовов Webdriver, но документация не дает много деталей.

ответ

1

Важно понимать, что все параметры будут решены после выполнения цепочки. Это означает, что вы не можете изменить их больше, как только вы выполнили первую команду в основном. В вашем примере вы устанавливаете значение переменной элемента в обратном вызове с обещанием. В то время, когда вы это делаете, elementIdSize уже читает элементную переменную (и, вероятно, выдает ошибку).

Правильный способ выполнения команды состоит в том, чтобы выполнять команды, у которых есть аргументы, которые позже будут решены в процедурах завершения или завершения. Вы также можете сохранять команды в WebdriverIO с помощью команд действий вместо необработанных команд протокола. Поэтому сначала используйте getSize вместо элемента вызова, а затем вызовите элемент elementIdSize. То есть работа GETSIZE ;-)

Я не уверен, что именно вы пытаетесь сделать, но вот код, который должен сделать трюк:

this.browser 
    .setViewportSize({width: 1000, height: 600}) 
    .getElementSize(selector).then(function(size) { 
     console.log('size of element "' + selector + " is', size); 
     // now as we have the size execute the scroll in a then callback 
     return this.scroll(0, 600 + size.height); 
    }) 
    // this get executed once we we did the scrolling since 
    // the getSize promise is only then fulfilled once the promise 
    // within the then function is resolved 
    .isVisible(otherElem).should.be.eventually.be(true, 'element was visible after scrolling') 
    .call(callback); 

(В качестве примечания: мы уже работаем на WebdriverIO v4, что позволит выполнять команды синхронно, поэтому больше не нужно обещать головные боли ;-))

+0

Я не видел 'getSize()' в API WebDriver. Есть ли где-нибудь лучше набор документации, или это одна из тех вещей, где вам просто нужно прорыть код и посмотреть, что там? – CodeChimp

+0

dang Я ошибался .. команда называется getElementSize http://webdriver.io/api/property/getElementSize.html .. обновил пример кода – ChristianB

 Смежные вопросы

  • Нет связанных вопросов^_^