Как нажать на пользовательский веб-компонент с помощью селена webdriver - PullRequest
0 голосов
/ 04 мая 2019

Я новичок в написании теста на селен, так что терпите меня.Я пытаюсь написать автоматический тест для элемента карусели на нашей домашней странице.Я хочу, чтобы тест щелкнул по одной из кнопок навигации карусели, а затем убедился, что в div карусели был добавлен какой-то встроенный стиль.(Этот стиль приведет к перемещению экрана карусели и отображению другого элемента.) Кнопка навигации - это пользовательский веб-элемент, а не или, или какая-либо другая, очевидно, активируемая вещь.Мой тест не пройден по click (), говоря: «WebDriverError: элемент не взаимодействует».Это потому, что Selenium не распознает мой пользовательский веб-элемент как интерактивную?Или я что-то не так делаю?

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

HTML:

<u-carousel id="hero-carousel">
    <div class="u.container"><!-- this is the element that gets the inline style added to -->
    ...carousel content here...
    </div>
</u-carousel>

<u-carousel-move class="home.hero.others active" u-for="hero-carousel" u-to="2">
    <div class="carousel-nav-button">
        Nav Item 2
    </div>
</u-carousel-move>
<u-carousel-move class="home.hero.others" u-for="hero-carousel" u-to="2">
    <div class="carousel-nav-button">
        Nav Item 3
    </div>
</u-carousel-move>

SeleniumJavascript:

describe('homepage carousel', () => {
    test('carousel displays', async () => {
        expect(await carouselAppPicker()).toBe(true);
    });
});

async carouselAppPicker() {
    console.info({action: 'carouselAppPicker', status: 'run'});
    let app_picker_xpath = '//u-carousel-move[contains(@class,"home.hero.others")][@u-for="hero-carousel"][@u-to="2"]';
    let app_picker = await this.driver.wait(until.elementLocated(By.xpath(app_picker_xpath)), 5000, 'Cannot find app picker element');
    await app_picker.click();
    let carousel_screen_xpath = '//u-carousel[@id="hero-carousel"]/div[@class="u.container"][@style="transform: translateX(-200%);"]';
    await this.driver.wait(until.elementLocated(By.xpath(carousel_screen_xpath)), 5000, 'Cannot find screen element');
    return true;
}

Это ошибка, которую я получаю, когда запускаю этот тест из командной строки, используя jest:

 homepage carousel › carousel displays

    WebDriverError: element not interactable
      (Session info: headless chrome=73.0.3683.103)
      (Driver info: chromedriver=2.46.628411 (hash),platform=Mac OS X 10.13.6 x86_64)

      at Object.checkLegacyResponse (node_modules/selenium-webdriver/lib/error.js:585:15)
      at parseHttpResponse (node_modules/selenium-webdriver/lib/http.js:533:13)
      at Executor.execute (node_modules/selenium-webdriver/lib/http.js:468:26)

1 Ответ

1 голос
/ 04 мая 2019

Попробуйте использовать JavaScript для нажатия.

driver.executeScript("arguments[0].click()",app_picker)
...