Как нажимать на элементы Highchart во время автоматизации

Есть ли способ получить локатор (склокатор или xpath и т. д.) Элементов в графике SmartGWT hightchart? Мне нужно автоматизировать действие щелчка по легенде серии на графике (серии, которые появляются в правой части графика).

Вот то, что я пытался идентифицировать локаторы валидации для элементов этого графа:

  • Использование подключаемого модуля Relative Xpath Helper. После нажатия на любой элемент графика highchart я получаю сообщение: «Уникальные идентификаторы не найдены».
  • Использование Selenium IDE, настроенного с помощью библиотек селена user-extensions.js и user-extensions-ide.js для smartgwt. После попытки идентифицировать локатор этих серий или любого другого элемента внутри графика я получаю сообщение: «LOCATOR_DETECTION_FAILED».
  • Использование плагина Selenium Page Object Generator. После создания файла java в файле java не было сгенерировано никакой информации, связанной с изображением.

Любая помощь будет принята с благодарностью.

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

Как нажимать на элементы Highchart во время автоматизации

<g class = "highcharts-legend" zIndex = "7" transform = "translate(-32,110)">
  <g zIndex = "1" clip-path = "url(#highcharts-2)">
    <g transform = "translate(0,1)">
      <g class = "highcharts-legend-item" zIndex = "1" transform = "translate(8,3)">
        <path fill = "none" d = "M 0 11 L 16 11" stroke-dasharray = "none" stroke = "#C00000" stroke-width = "2"></path>
        <path fill = "#C00000" d = "M 8 9 C 10.664 9 10.664 13 8 13 C 5.336 13 5.336 9 8 9 Z"></path>
        <text x = "21" y = "15" style = "font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:12px;cursor:pointer;color:#274b6d;fill:#274b6d;" text-anchor = "start" zIndex = "2">
          <tspan x = "21">Worst Inventory On Site</tspan>
        </text>
      </g>
      <g class = "highcharts-legend-item" zIndex = "1" transform = "translate(8,21)">
        <path fill = "none" d = "M 0 11 L 16 11" stroke-dasharray = "none" stroke = "#3A5723" stroke-width = "2"></path>
        <path fill = "#3A5723" d = "M 8 9 C 10.664 9 10.664 13 8 13 C 5.336 13 5.336 9 8 9 Z"></path>
        <text x = "21" y = "15" style = "font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:12px;cursor:pointer;color:#274b6d;fill:#274b6d;" text-anchor = "start" zIndex = "2">
          <tspan x = "21">Total Ins</tspan>
        </text>
      </g>
      <g class = "highcharts-legend-item" zIndex = "1" transform = "translate(8,39)">
        <path fill = "none" d = "M 0 11 L 16 11" stroke-dasharray = "none" stroke = "#CCC" stroke-width = "2"></path>
        <path fill = "#CCC" d = "M 8 9 C 10.664 9 10.664 13 8 13 C 5.336 13 5.336 9 8 9 Z"></path>
        <text x = "21" y = "15" style = "font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:12px;cursor:pointer;color:#CCC;fill:#CCC;" text-anchor = "start" zIndex = "2">
        <tspan x = "21">Total Outs</tspan>
       </text>
      </g>
      <g class = "highcharts-legend-item" zIndex = "1" transform = "translate(8,57)">
        <path fill = "none" d = "M 0 11 L 16 11" stroke-dasharray = "2,2" stroke = "#CCC" stroke-width = "2"></path>
        <path fill = "#CCC" d = "M 8 9 C 10.664 9 10.664 13 8 13 C 5.336 13 5.336 9 8 9 Z"></path>
        <text x = "21" y = "15" style = "font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:12px;cursor:pointer;color:#CCC;fill:#CCC;" text-anchor = "start" zIndex = "2">
          <tspan x = "21">Inventory On Site</tspan>
       </text>
      </g>
      <g class = "highcharts-legend-item" zIndex = "1" transform = "translate(8,75)">
        <path fill = "none" d = "M 0 11 L 16 11" stroke-dasharray = "6,2" stroke = "#CCC" stroke-width = "2"></path>
        <path fill = "#CCC" d = "M 8 9 C 10.664 9 10.664 13 8 13 C 5.336 13 5.336 9 8 9 Z"></path>
        <text x = "21" y = "15" style = "font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:12px;cursor:pointer;color:#CCC;fill:#CCC;" text-anchor = "start" zIndex = "2">
        <tspan x = "21">Inventory On Transit</tspan>
       </text>
      </g>
    </g>
  </g>
</g>

Пожалуйста, разместите код в виде текста, а не изображения.

Artemis 10.07.2018 17:19
Не делай этого
DebanjanB 10.07.2018 17:21

Как мы узнаем, какой HTML предназначен для графиков, и ряды, которые идут после графиков. проявите некоторое усилие, задавая вопрос.

cruisepandey 10.07.2018 19:24

Спасибо вам всем. Под ответом @ dangi13 я опубликовал полученное решение.

Natalia Herrera 19.07.2018 23:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
1 154
2

Ответы 2

Вы можете использовать приведенный ниже код для нажатия на HighChart Elements:

/**
     * @param graphName Use one of below values.
     * Worst Inventory On Site
     * Total Ins
     * Total Outs
     * Inventory On Site
     * Inventory On Transit
     */
    public void clickOnGraph(String graphName) {
         WebElement graphElement = driver.findElement(By.xpath("//g[@class='highcharts-legend-item']//tspan[text()='" + graphName + "']"));
         graphElement.click();
    }

Для дальнейших манипуляций с элементом HighChart. Вы можете сослаться на:

https://github.com/Ardesco/Powder-Monkey/blob/master/src/main/java/com/lazerycode/selenium/graphs/HighCharts.java

Это очень полезно для операций с Selenium, связанных с HighCharts.

Если обычный щелчок не работает, вы можете попробовать щелкнуть с помощью JavaScriptExecutor или класса Actions.

Пожалуйста, дайте мне знать, если это вам поможет :)

Я попробовал ваше решение и показываю следующую ошибку

Natalia Herrera 12.07.2018 18:05

Спасибо @ dangi13 за вашу помощь. Однако я нашел решение с использованием другой структуры xpath: sharedData.appInstance.findElement (By.xpath ("// [name () = 'g' and @ class = 'highcharts-legend'] // [name () = ' text '] // * [name () =' tspa‌ n 'and text () =' Худший инвентарь на сайте '] ")). click ();` `

Natalia Herrera 19.07.2018 23:19

Спасибо @ dangi13 за вашу помощь. Однако я нашел решение, используя другую структуру xpath:

sharedData.appInstance.findElement(By.xpath("//[name()='g' and @class='highcharts-legend']//[name()='text']//*[name()='tspan' and text()='Worst Inventory on Site']")).click();

Другие вопросы по теме