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

java
webdriver
Теги: #<Tag:0x00007fedc75ba3a8> #<Tag:0x00007fedc75ba268>

(Alexey Kosenko) #1

Приветствую.
Впервые столкнулся с псевдоэлементами. В тесте мне необходимо вытаскивать 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
Но не знаю, как правильно это использовать. Надеюсь на вашу помощь.


(Vasiliy Rakshin) #2
  1. У вас в локаторе последний символ точка - а нужен ли он?
  2. Попробуйте написать локатор типа ".wl-navigation div[class='bt-menu:before']".
  3. как вы проверяете локаторы что написали? используйте firepath

(Sergey Korol) #3

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

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

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

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


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

(Alexey Kosenko) #5

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

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

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

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

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


(Sergey Korol) #6

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


(Alexey Kosenko) #7

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

<!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:


(Alexey Kosenko) #8

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

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);

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