t.me/atinfo_chat Telegram группа по автоматизации тестирования

Protractor. Использование Scroll и Keyboard actions

Теги: #<Tag:0x00007f9aff20b628> #<Tag:0x00007f9aff20b538> #<Tag:0x00007f9aff20b3f8> #<Tag:0x00007f9aff20b2b8>

Привет.
Подскажите как вы используете Scroll или Keyboard actions что бы избежать:

Failed: unknown error: Element is not clickable at point (326, 549)

Спасибо.

Здравствуйте. Хорошо бы код посмотреть. Судя по всему, нужный вам элемент не найден там, где вы его ожидаете. Или найден, но не вовремя. Отсюда и невозможность на него кликнуть. Я бы копал в сторону ожиданий/таймаутов.

Спасибо за ответ, честно, я не думаю что проблема в ожиданиях, здесь простое заполнение формы, и все заполняется если я в ручную скролю страницу вниз, если нет то тест сразу падает на елементе, который за окном браузера

beforeEach( async function() {
        await new HomePage().open();
        await signUpButton.click();
        await closePopUp.click();
        await browser.sleep(3000);
        await browser.wait(EC.invisibilityOf($('.pop-up')), 3000 );
    });

    it('first Sign Up', async function () {
    email.sendKeys('test@gmail.com');
    passField.sendKeys('Alex2030');
    passConfField.sendKeys('Alex2030');
    await browser.sleep(1000);
    prefix.click();
    await browser.sleep(1000);
    mr.click();
    firstName.sendKeys('Protractor');
    lastName.sendKeys('AutoTest');
    company.sendKeys(' QA');
    fullAddress.sendKeys('Chicago');
    await expect($('.suggestion')).toAppear(2000, 'suggestive search is not present');
    await suggestiveSearch.click();
    await address1.sendKeys('Chicago Address 1 90000');
    await address2.sendKeys('This is second test address, Chicago');
    zip.sendKeys('12345');
    phone.sendKeys('1234567890');
    await browser.wait(isClickable, 2000);
    await buttonSignUp.click();


    });

Привет, можешь попробовать поскролить просто через .executeScript()

Так же много await не указано - обязательно нужно ставить await перед всеми асинхронными действиями.


beforeEach(async function () {
    await new HomePage().open();
    await signUpButton.click();
    await closePopUp.click();
    await browser.sleep(3000);
    await browser.wait(EC.invisibilityOf($('.pop-up')), 3000);
});

async function scrollTo(elementToScroll) {
    await browser.executeScript("arguments[0].scrollIntoView();", elementToScroll)
}

it('first Sign Up', async function () {
    await email.sendKeys('test@gmail.com');
    await passField.sendKeys('Alex2030');
    await passConfField.sendKeys('Alex2030');
    await browser.sleep(1000);
    await prefix.click();
    await browser.sleep(1000);
    await mr.click();
    await firstName.sendKeys('Protractor');
    await lastName.sendKeys('AutoTest');
    await company.sendKeys(' QA');
    await fullAddress.sendKeys('Chicago');
    await expect($('.suggestion')).toAppear(2000, 'suggestive search is not present');
    await suggestiveSearch.click();
    await address1.sendKeys('Chicago Address 1 90000');
    await address2.sendKeys('This is second test address, Chicago');
    await zip.sendKeys('12345');
    await phone.sendKeys('1234567890');
    await browser.wait(isClickable, 2000);
    await scrollTo(buttonSignUp) // До этого элемента нужно поскролить?
    await buttonSignUp.click();
});
1 Симпатия

Спасибо, прийду домой, добавлю

через executeScript() должно кликнуть. Если нет, то мжно попробовать(Python)
element_to_hover_over = self.driver.find_element(By...") hover = ActionChains(self.driver).move_to_element(element_to_hover_over) hover.perform()

Наташ, ну для Python у меня вопроса нету, ActionChains тоже там использую, хотя он и не очень стабильный в плане скрола. Но здесь javascript :slightly_smiling_face:

так в webdriverjs(и как следствие в protractorjs) тоже есть action chains:

rowser.actions().mouseMove(someElement).perform();

http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.actions