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

WebDriver, Java и доступ к псевдо классам и элементам

Теги: #<Tag:0x00007f7487877cd0> #<Tag:0x00007f7487877c08>

Приветствую.
Впервые столкнулся с псевдоэлементами. В тесте мне необходимо вытаскивать CssValue “color” элемента с таким вот CssSelector: .wl-navigation .bt-menu:before.
Делаю это следующей строкой:

driver.findElement(By.cssSelector(".wl-navigation .bt-menu:before.")) .getCssValue("color");

И получаю ошибку:

org.openqa.selenium.InvalidSelectorException: The given selector .wl-navigation .bt-menu:before. is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: An invalid or illegal selector was specified

нагуглил такое: http://davidwalsh.name/pseudo-element
Но не знаю, как правильно это использовать. Надеюсь на вашу помощь.

  1. У вас в локаторе последний символ точка - а нужен ли он?
  2. Попробуйте написать локатор типа “.wl-navigation div[class=‘bt-menu:before’]”.
  3. как вы проверяете локаторы что написали? используйте firepath

Точка в конце селектора - опечатка?

Вообще говоря, нетривиальные CSS-селекторы можно процессить с помощью JS executor’a:

executeScript("return $('.wl-navigation .bt-menu:before').css('color');");

П.С. А по XPath не пробовали искать?

  1. Точка таки не нужна, это опечатка, сорри
  2. XPath пробовал, локаторы копирую из chrome development tool.

Прошу прощение, можете поподробнее ткнуть носом в JS executor? Первый раз с ним сталкиваюсь
Такая конструкция:

JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript(“return $(’.wl-navigation .bt-menu:before’).css(‘color’);”);

породила такую ошибку:

org.openqa.selenium.WebDriverException: $ is not a function

Заранее спасибо

Ну это означает лишь то, что JQuery не подключен у вас (нет саппорта в приложении самом). Тогда надо по старинке искать - через document.querySelector(...). Но опять-таки, возвращаясь к предыдущему вопросу: неужели для вашего элемента невозможно подобрать xpath?

структура такая:

<!DOCTYPE html>
<html class="js js flexbox flexboxlegacy canvas canvastext webgl no-touch… webworkers applicationcache svg inlinesvg smil svgclippaths" lang="en" style="">
<head></head>
<body class="html front logged-in no-sidebars page-front navbar-administration navbar-vertical navbar-tray-open navbar-fixed" style="padding-top: 39px;">
<nav id="navbar-administration" class="drupal-navbar overlay-displace-top navbar-processed navbar-oriented" role="navigation"></nav>
<header class="wl-header">
    ::before
    <div class="wl-logo"></div>
    <div class="wl-user-menu"></div>
    <div class="wl-nav-switcher"></div>
    <div id="block-system-main-menu" class="wl-navigation bt-menu-open">
        **<nav id="bt-menu" class="bt-menu">**
            **::before**
            <ul></ul>
        </nav>
    </div>
    <div class="navigation-fixed active"></div>
            </header>
        </div>
        <div class="wl-main-wrap" style="padding-bottom: 0px;"></div>
        <!--
-->

С xpath у меня не получилось :frowning:

Получилось так:

String script = “return window.getComputedStyle(document.querySelector(‘myCSS’),’:before’).getPropertyValue(‘background-color’)”;
JavascriptExecutor js = (JavascriptExecutor)driver;
String content = (String) js.executeScript(script);
System.out.println(content);

Всем спасибо)