Статьи

Как WebdriverIO уникальным образом использует локаторы Selenium — учебное пособие по WebdriverIO с примерами

В любой среде тестирования автоматизации поиск элементов является наиболее фундаментальным видом деятельности. Мы должны очень тщательно выбирать веб-элементы, чтобы сценарий автоматизации мог обрабатывать статические и динамические элементы для получения стабильных результатов тестирования. WebDriverIO имеет много продвинутых стратегий локатора / селектора Selenium по сравнению с другими системами автоматизации тестирования. Традиционно каждый локатор имеет определенный метод By, который идентифицирует локаторы во время выполнения. Однако WebdriverIO упростил эти методы By, и теперь нам не нужно указывать их явно. WebdriverIO обладает интеллектом, чтобы определить, какой локатор был передан. К концу этого учебного руководства по WebdriverIO вы узнаете, как WebDriverIO преобразует путь стратегии локатора Selenium и насколько легко ее запомнить и написать.

Примечание. Если вы обращаетесь к официальной документации платформы WebdriverIO, вы заметите, что они называли локаторы селекторами. Вам не нужно запутываться, если вы знакомы с некоторыми другими системами автоматизации тестирования в Selenium. Например, если вы работали с локаторами Selenium в Java, то эти локаторы в WebdriverIO рассматриваются как селекторы.

Для простоты понимания я буду называть их локаторами Selenium в этом руководстве по WebdriverIO. Так как это более стандартизированный и привычный термин для автоматизации тестирования с Selenium .

Что такое локаторы селена в WebdriverIO?

Прежде чем мы начнем этот учебник WebdriverIO для локаторов / селекторов Selenium, давайте быстро разберемся, для чего они используются. Локаторы Selenium используются для поиска элементов на веб-странице через Selenium WebDriver при выполнении сценария автоматизации тестирования. Селектор — это команда в Selenium. Библиотека Selenium читает эту команду из сценария, преобразует ее в HTTP-запрос и, наконец, взаимодействует с веб-браузерами, выполняет действия на основе этой команды.

Подробнее: Учебник WebdriverIO с примерами для тестирования Selenium

Стратегии Selenium Locator

Когда вы получите практическое тестирование автоматизации Selenium с помощью WebdriverIO, вы должны знать о правильной стратегии, которая работает для поиска уникальных элементов на веб-странице. Поиск элементов по идентификатору, имени и относительной XPath будет первым выбором для поиска уникального элемента на веб-сайте. Если вы не смогли найти какой-либо из этих способов, рекомендуется выбрать другие типы локаторов / селекторов Selenium.

Если вы выполняли тестирование автоматизации Selenium с Java, вы могли использовать методы findElement () и findElements (), чтобы найти селектор из DOM. Тем не менее, WebdriverIO предлагает уникальный способ тестирования Selenium с WebDriverIO. С WebdriverIO вам не нужно упоминать стратегию локатора Selenium, поскольку она автоматически поймет, какие типы стратегии локатора следует использовать. Мы рассмотрим каждый Selenium Locator в этом руководстве по WebdriverIO. Прежде чем перейти к практической демонстрации, обязательно запишите нижеприведенные методы поиска элементов в WebDriverIO:

$ (): Один знак доллара используется для поиска одного веб-элемента
$$ (): двойной знак доллара, используемый для поиска нескольких веб-элементов

Помимо этих двух методов, WebDriverIO поддерживает другие методы, которые,

custom $ (): используется для поиска пользовательской стратегии для одного веб-элемента
custom $ (): используется для поиска пользовательской стратегии для нескольких веб-элементов

реагирует на $ (): используется для поиска одного компонента React по его имени, и он получает фильтр по реквизиту и состоянию
реагировать $$ (): используется для поиска кратных компонентов Реактива по их заданному имени, и он получает фильтр по реквизиту и состоянию

Примечание: команда реагирует на действия $ и реагирует только на приложения, использующие React v16.x

Как найти веб-элемент в браузере?

Чтобы найти веб-элемент в браузере, пользователь должен перейти к инструментам разработчика браузера, нажав F12 в окнах и опцию + command + i в операционной системе Mac или щелкнув правой кнопкой мыши веб-сайт и выбрав опцию проверки.

Инструменты разработчика браузера

Открыв инструмент разработчика, вы можете увидеть HTML-теги на вкладке «Элементы». Эта вкладка HTML вызывает элементы DOM. Чтобы найти определенные веб-элементы, выберите значок селектора (перед вкладкой «Элементы») и наведите курсор на элемент, который вы хотите найти в DOM.

Лучшие 16 советов по использованию Chrome Dev Tools для кросс-браузерного тестирования

Список локаторов селена в WebDriverIO

Теперь, когда вы хорошо разбираетесь в локаторах Selenium, давайте рассмотрим различные типы локаторов Selenium в этом руководстве по WebdriverIO. Ниже перечислены поддерживаемые селекторы WebdriverIO.

  • CSS Query Selector
  • Текст ссылки
  • Частичная ссылка
  • Элемент с определенным текстом
  • Название тэга
  • название
  • XPATH
  • МНЕ БЫ
  • Функция JS
  • Селекторы цепей
  • Реагировать селекторы
  • Пользовательский Селектор

Используя методы $, $$, Custom $, Custom $$, реагировать $ и реагировать $$, пользователь может найти элементы и выполнить нужные операции. Давайте углубимся в каждый из этих локаторов Selenium в этом учебном руководстве по WebdriverIO для тестирования автоматизации Selenium с примерами DOM.

CSS Query Selector

Первый локатор в этом учебнике WebdriverIO для тестирования автоматизации Selenium — это селектор CSS Query, который используется для поиска элемента из DOM.

Как вы можете найти CSS Query?

Зайдите в инструменты разработчика, найдите элемент и щелкните правой кнопкой мыши на Выбранном элементе в DOM и скопируйте опцию селектора CSS.

Синтаксис: $('CSS Query');

Пример:

1
2
3
4
5
6
7
8
const assert = require("assert");
  
describe("Selector Example", function() {
   it("CSS Query Selector", function() {
       $("body > div.ng-scope > div > div > ul").click();    
   });
});

Выход:

Когда вы запустили приведенный выше скрипт, вы можете найти консольный журнал и заметить, что WebdriverIO преобразован в метод findElement с помощью стратегии селектора CSS.

1
2
3
4
[0-0] 2019-12-24T10:34:19.689Z INFO webdriver: COMMAND findElement("css selector", "body > div.ng-scope > div > div > ul")
[0-0] 2019-12-24T10:34:19.689Z INFO webdriver: [POST] http://127.0.0.1:4444/session/839505649081eaf3bef60a252593f2f9/element
[0-0] 2019-12-24T10:34:19.689Z INFO webdriver: DATA { using: 'css selector',
 value: 'body > div.ng-scope > div > div > ul' }

Помните, что иногда использование селектора запросов CSS может привести к поиску нескольких элементов в виде листа CSS, используемого для всего сайта. Теперь давайте перейдем к следующему локатору Selenium в этом руководстве по WebdriverIO.

Текст ссылки

Веб-сайт состоит из различных типов компонентов, таких как текстовое поле, ссылки, раскрывающийся список и т. Д. Даже одна веб-страница может иметь множество ссылок на нее. Выбор конкретной ссылки для вашего скрипта автоматизации Selenium может стать сложной задачей. Именно здесь вступает в игру ссылка Text Selenium Locators для WebdriverIO. Если вы хотите найти какую-либо гиперссылку, используйте эту стратегию выбора текста ссылки.

Синтаксис: $('=anchorText');

Здесь знак = равно используется для поиска элемента привязки с «конкретным текстом».

Пример:

1
2
3
4
5
6
7
8
9
const assert = require("assert");
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");    
   });
   it("Link Text Example", function() {
       $("=Automation").click();
   });
});

Когда вы запустите приведенный выше скрипт тестирования автоматизации, вы сможете найти консольный журнал. Если вы заметили журналы, вы заметите, что WebdriverIO автоматически обнаружил метод findElement со стратегией текста ссылки.

Выход:

1
2
3
0-0] 2019-12-24T10:58:56.640Z INFO webdriver: COMMAND findElement("link text", "Automation")
[0-0] 2019-12-24T10:58:56.640Z INFO webdriver: [POST] http://127.0.0.1:4444/session/0a34df231b0b77c5e0e4d687a14829a2/element
[0-0] 2019-12-24T10:58:56.640Z INFO webdriver: DATA { using: 'link text', value: 'Automation' }

Будьте осторожны с элементами, выбираемыми этим Selenium Locator в WebdriverIO, так как это может привести к нескольким якорям с одинаковым текстом ссылки. Теперь, когда мы знаем текст ссылки, давайте теперь перейдем к локатору текста частичной ссылки в этом руководстве по WebdriverIO.

Частичная ссылка

Частичный текст ссылки аналогичен тексту ссылки, но единственное отличие состоит в том, что это помогает, когда начальные несколько символов ссылки фиксированы, а остальные являются динамическими.

Синтаксис: $('=anchorMatchedText');

* = начало, равное знаку, используется для поиска элемента привязки с сопоставленным текстом ‘.

1
$("=Automa")


Пример:

1
2
3
4
5
6
7
8
9
const assert = require("assert");
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");
   });
   it("Partial Link Text Example", function() {
       $("*=Automa").click();
   });
});

Когда вы запустите приведенный выше скрипт, вы сможете найти консольный журнал и заметить, что WebdriverIO преобразован в метод findElement с текстовой стратегией частичной ссылки.

Выход:

1
2
$(‘elementTag=certain text’); used for fixed text
$(‘elementTag*=partial text’); used for partial text

Элемент с определенным текстом

В HTML каждый тег известен как элемент, и немногие элементы имеют прямой текст, а несколько элементов обернуты вокруг других тегов. Если вы хотите найти элемент, имеющий определенный или частичный текст, то этот селектор предпочтительнее использовать.

Во время тестирования автоматизации Selenium с использованием Java вы должны использовать XPath с методом normalize-space (), чтобы найти текст вместе с тегом HTML, если вы хотите найти тег HTML с некоторым текстом, но WebdriverIO использует описанный ниже метод.

Синтаксис:

1
2
$(‘elementTag=certain text’); used for fixed text
$(‘elementTag*=partial text’); used for partial text

Этот селектор получает помощь от знака = (равно) и знака * = (начало равно).

Например, чтобы найти Cross Browser Testing Cloud снизу тега H1, с помощью этой команды $ («h1 = Cross Browser Testing Cloud»)

<h1 class = ”big_title text_shadow_black __web-inspector-hide-shortcut __”> Кросс-браузерное тестирование облака </ h1>

То же самое будет работать для класса и атрибута ID элементов. Например:

$ (‘# id = определенный текст’); используется для фиксированного текста
$ (‘# id * = определенный текст’); используется для частичного текста
$ (‘. classname = определенный текст’); используется для фиксированного текста
$ (‘. classname * = частичный текст’); используется для частичного текста

Здесь # используется, когда вы хотите найти элементы по ID и. (точка) используется для имени класса.

Пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
const assert = require("assert");
  
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");
   });
   it("Element with certain text Example", function() {
       $("h1=Cross Browser Testing Cloud").click();
   });
   it("Element with Partial text Example", function() {
       $("h1*=Cross Browser Testing").click();
   });
});

Когда вы запустите приведенный выше скрипт, вы сможете найти консольный журнал и заметить, что WebdriverIO преобразован в метод findElement с помощью «normalize-space ()» и «contains ()».

Выход:

01
02
03
04
05
06
07
08
09
10
11
[0-0] 2019-12-24T11:39:33.082Z INFO webdriver: COMMAND findElement("xpath", ".//h1[normalize-space() = "Cross Browser Testing Cloud"]")
[0-0] 2019-12-24T11:39:33.082Z INFO webdriver: [POST] http://127.0.0.1:4444/session/423097da27eadf53b1fac0f11655e9be/element
[0-0] 2019-12-24T11:39:33.083Z INFO webdriver: DATA { using: 'xpath',
 value: './/h1[normalize-space() = "Cross Browser Testing Cloud"]' }
[0-0] 2019-12-24T11:39:33.099Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': '03328283-f372-423c-8218-48759ac98631' }
[0-0] 2019-12-24T11:39:33.104Z INFO webdriver: COMMAND elementClick("03328283-f372-423c-8218-48759ac98631")
[0-0] 2019-12-24T11:39:33.105Z INFO webdriver: [POST] http://127.0.0.1:4444/session/423097da27eadf53b1fac0f11655e9be/element/03328283-f372-423c-8218-48759ac98631/click
[0-0] 2019-12-24T11:39:33.151Z INFO webdriver: COMMAND findElement("xpath", ".//h1[contains(., "Cross Browser Testing")]")
[0-0] 2019-12-24T11:39:33.151Z INFO webdriver: [POST] http://127.0.0.1:4444/session/423097da27eadf53b1fac0f11655e9be/element
[0-0] 2019-12-24T11:39:33.151Z INFO webdriver: DATA { using: 'xpath',
 value: './/h1[contains(., "Cross Browser Testing")]' }

Теперь давайте взглянем на локатор имен тегов в этом руководстве по WebdriverIO для тестирования автоматизации Selenium.

Название тэга

Мы используем селектор имени тега, чтобы найти элемент, используя любой тег HTML. Это очень редко используемый локатор Selenium. Однако это очень важно, если вы имеете дело с таблицами или элементами календаря. Во время тестирования автоматизации Selenium вы можете передать имя тега как <tag> или <tag />.

Синтаксис:

1
2
$(‘<tag>’);
$(‘<tag />’);

Пример:

1
2
3
4
5
6
7
8
9
const assert = require("assert");
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");
   });
   it("Tag Name Example", function() {
       $("<h1>").getText();
   });
});

Вот выходные данные, когда вышеуказанный скрипт тестирования автоматизации Selenium выполняется в WebdriverIO.

Выход:

1
2
3
[0-0] 2019-12-26T10:07:37.804Z INFO webdriver: COMMAND findElement("tag name", "h1")
[0-0] 2019-12-26T10:07:37.804Z INFO webdriver: [POST] http://127.0.0.1:4444/session/d67eadf284b85ecd1e641855c194937b/element
2019-12-26T10:07:37.804Z INFO webdriver: DATA { using: 'tag name', value: 'h1' }

название

Этот локатор Selenium похож на локатор ID в Selenium. Иногда веб-разработчик дает имя узлу HTML. Если у узла есть атрибут name, то предпочтительно включить локатор Name в тестирование автоматизации Selenium. Селектор имени должен быть в квадратных скобках с атрибутом имени.

Синтаксис:

1
$(‘[<name attribute>]’)

Пример:

01
02
03
04
05
06
07
08
09
10
11
const assert = require("assert");
  
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.facebook.com/");
   });
   it("Name Example", function() {
       $("[name = 'email']").setValue("123");
   });
  
});

Выход:

1
2
3
[0-0] 2019-12-26T10:15:08.208Z INFO webdriver: COMMAND findElement("css selector", "[name = 'email']")
[0-0] 2019-12-26T10:15:08.208Z INFO webdriver: [POST] http://127.0.0.1:4444/session/aee87e328f63eb11678a49adce17df4b/element
[0-0] 2019-12-26T10:15:08.208Z INFO webdriver: DATA { using: 'css selector', value: '[name = \'email\']' }

XPath

Чрезвычайно ключевой локатор Selenium из этого руководства по WebdriverIO. Также в WebDriverIO вы можете написать абсолютный XPath и относительный XPath. Абсолютный XPath начинается с / slash, а относительный начинается с // slash. Это очень сильный и часто используемый селектор / локатор для идентификации элементов с помощью автоматизации тестирования Selenium.

Следующие специальные символы используются при написании XPath.

, — Точка означает, что выбор начинается с текущего узла
* — Звезда означает выбрать любой узел
/ — Одиночная косая черта означает, что начинается с корневого узла и используется для абсолютного XPath
// — Двойная косая черта означает поиск узла с использованием относительного XPath
[] — квадратная скобка, используемая для индекса, а также для поиска XPath путем передачи атрибута и его значения
@ — используется для идентификации атрибута HTML в XPath

Синтаксис для абсолютного XPath:

1
$(‘<starts with /body>’);

Синтаксис для относительного XPath:

1
$(‘<starts with .//>’);

Пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
const assert = require("assert");
  
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");
   });
  
   it("Xpath - Absolute Example", function() {
       $("/html/body/div[2]/section[1]/div/div/h1").getText();
   });
  
   it("Xpath - Relative Example", function() {
       $(".//h1[@class='big_title text_shadow_black']").getText();
   });
});

Когда вы запустите приведенный выше скрипт, вы сможете найти консольный журнал. Обратите внимание, что WebdriverIO преобразован в метод findElement с помощью «XPath».

Выход:

01
02
03
04
05
06
07
08
09
10
11
12
[0-0] 2019-12-25T17:54:37.674Z INFO webdriver: COMMAND findElement("xpath", "/html/body/div[2]/section[1]/div/div/h1")
[0-0] 2019-12-25T17:54:37.675Z INFO webdriver: [POST] http://127.0.0.1:4444/session/5f6efebb541063139a91dec5d13c32f6/element
2019-12-25T17:54:37.675Z INFO webdriver: DATA { using: 'xpath',
 value: '/html/body/div[2]/section[1]/div/div/h1' }
[0-0] 2019-12-25T17:54:37.688Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'bc244c90-ed18-4d94-9b7a-d026ba7d70d4' }
[0-0] 2019-12-25T17:54:37.694Z INFO webdriver: COMMAND getElementText("bc244c90-ed18-4d94-9b7a-d026ba7d70d4")
[0-0] 2019-12-25T17:54:37.694Z INFO webdriver: [GET] http://127.0.0.1:4444/session/5f6efebb541063139a91dec5d13c32f6/element/bc244c90-ed18-4d94-9b7a-d026ba7d70d4/text
[0-0] 2019-12-25T17:54:37.709Z INFO webdriver: RESULT Cross Browser Testing Cloud
[0-0] 2019-12-25T17:54:37.710Z INFO webdriver: COMMAND findElement("xpath", ".//h1[@class='big_title text_shadow_black']")
[0-0] 2019-12-25T17:54:37.710Z INFO webdriver: [POST] http://127.0.0.1:4444/session/5f6efebb541063139a91dec5d13c32f6/element
[0-0] 2019-12-25T17:54:37.710Z INFO webdriver: DATA { using: 'xpath',
 value: './/h1[@class=\'big_title text_shadow_black\']' }

МНЕ БЫ

Еще один важный Selenium Locator из этого руководства по WebdriverIO. ID является чрезвычайно мощным селектором для поиска элемента из DOM. Это всегда уникальный элемент в DOM. Еще одна важная вещь заключается в том, что если вы хотите ускорить выполнение вашей автоматизации, то это обязательное использование локатора для тестирования автоматизации Selenium. Идентификатор напрямую получает запрос из DOM, тогда как XPath сканирует документы на основе относительного или абсолютного пути, что является трудоемким методом.

# знак используется для поиска элементов по идентификатору.

Синтаксис:

1
$(#<idname>);

Пример:

01
02
03
04
05
06
07
08
09
10
const assert = require("assert");
  
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.facebook.com/");
   });
   it("ID Example", function() {
       $("#email").setValue("123");
   });
});

Теперь здесь вы должны наблюдать этот выходной журнал. Когда вы запустите вышеприведенный скрипт, вы увидите, что селектор идентификатора внутренне преобразуется в селектор CSS и находит элемент.

Выход:

1
2
3
[0-0] 2019-12-25T18:29:26.359Z INFO webdriver: COMMAND findElement("css selector", "#email")
[0-0] 2019-12-25T18:29:26.360Z INFO webdriver: [POST] http://127.0.0.1:4444/session/52e465fa0b2d0dacaf976994dd1edc60/element
2019-12-25T18:29:26.360Z INFO webdriver: DATA { using: 'css selector', value: '#email' }

Теперь мы рассмотрели обычные локаторы Selenium в WebdriverIO. Далее мы рассмотрим расширенные локаторы / селекторы Selenium в этом руководстве по WebdriverIO.

Селекторы цепей

Иногда бывает трудно найти элемент, который не имеет идентификатора, имени, строк и ячеек таблицы, в таком случае этот селектор цепей помогает вам получить ваш уникальный элемент. Для этого нет конкретного символа, но вы просто вызываете $ (). $ (), Пока не найдете нужный элемент по знаку точки (.).

Примечание. Селектор / локатор цепочки использует концепцию родитель-потомок. Поэтому элемент Next цепочки должен попадать под селектор родительской цепочки.

Синтаксис:

1
$(selector).$(selector).$(selector)

Пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
const assert = require("assert");
  
describe("Selector Example", function() {
    
   it("Open URL", function() {
       driver.url("https://www.facebook.com/");
   });
    
   it("Chain - Selector Example", function() {
       $("#login_form")
           .$(".//table[@role='presentation']")
           .$("#email")
           .setValue("123");
   });
});

Когда скрипт выполняется, каждый элемент начинает поиск элемента один за другим, пока не достигнет последнего элемента. Сначала он использует findElement (), а затем вызывает findElementFromElement ().

Выход:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
0-0] 2019-12-26T06:14:22.748Z INFO webdriver: COMMAND findElement("css selector", "#login_form")
[0-0] 2019-12-26T06:14:22.748Z INFO webdriver: [POST] http://127.0.0.1:4444/session/3f354aaa54fb0ffee1fdf547ad3d9b04/element
[0-0] 2019-12-26T06:14:22.748Z INFO webdriver: DATA { using: 'css selector', value: '#login_form' }
[0-0] 2019-12-26T06:14:22.760Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'f0736c61-735d-4cc8-82e1-1fd1e0f47b39' }
[0-0] 2019-12-26T06:14:22.766Z INFO webdriver: COMMAND findElementFromElement("f0736c61-735d-4cc8-82e1-1fd1e0f47b39", "xpath", ".//table[@role='presentation']")
[0-0] 2019-12-26T06:14:22.766Z INFO webdriver: [POST] http://127.0.0.1:4444/session/3f354aaa54fb0ffee1fdf547ad3d9b04/element/f0736c61-735d-4cc8-82e1-1fd1e0f47b39/element
[0-0] 2019-12-26T06:14:22.766Z INFO webdriver: DATA { using: 'xpath', value: './/table[@role=\'presentation\']' }
[0-0] 2019-12-26T06:14:22.778Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'ab53a7ad-fc8d-4081-810d-745b001fad02' }
[0-0] 2019-12-26T06:14:22.779Z INFO webdriver: COMMAND findElementFromElement("ab53a7ad-fc8d-4081-810d-745b001fad02", "css selector", "#email")
[0-0] 2019-12-26T06:14:22.780Z INFO webdriver: [POST] http://127.0.0.1:4444/session/3f354aaa54fb0ffee1fdf547ad3d9b04/element/ab53a7ad-fc8d-4081-810d-745b001fad02/element
[0-0] 2019-12-26T06:14:22.780Z INFO webdriver: DATA { using: 'css selector', value: '#email' }
[0-0] 2019-12-26T06:14:22.789Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': '090696e4-585f-442c-a39d-dfe98f4d5d78' }
[0-0] 2019-12-26T06:14:22.791Z INFO webdriver: COMMAND elementClear("090696e4-585f-442c-a39d-dfe98f4d5d78")
[0-0] 2019-12-26T06:14:22.791Z INFO webdriver: [POST] http://127.0.0.1:4444/session/3f354aaa54fb0ffee1fdf547ad3d9b04/element/090696e4-585f-442c-a39d-dfe98f4d5d78/clear
[0-0] 2019-12-26T06:14:22.817Z INFO webdriver: COMMAND elementSendKeys("090696e4-585f-442c-a39d-dfe98f4d5d78", "123")
[0-0] 2019-12-26T06:14:22.817Z INFO webdriver: [POST] http://127.0.0.1:4444/session/3f354aaa54fb0ffee1fdf547ad3d9b04/element/090696e4-585f-442c-a39d-dfe98f4d5d78/value
[0-0] 2019-12-26T06:14:22.817Z INFO webdriver: DATA { text: '123' }

Функция JS

WebdriverIO поддерживает JS-селектор / локатор для поиска элементов с использованием JavaScript.

Синтаксис:

1
$(function() {return <JS script>})

Пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
const assert = require("assert");
  
describe("Selector Example", function() {
   it("Open URL", function() {
       driver.url("https://www.lambdatest.com/");
   });
  
   it("JS Function Example", function() {
       const elem = $("//*[@id='navbarSupportedContent']/ul/li[1]");
       console.log(
           elem
               .$(function() {
                   return this.nextSibling.nextSibling;
               })
               .getText()
       );
   });
});

Веб-элементы, хранящиеся в переменной, а затем JS-функции вызывают с помощью if $ (). Он преобразовал внутренне executeScript ().

Выход:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
[0-0] 2019-12-25T18:49:26.477Z INFO webdriver: COMMAND executeScript(<fn>, <object>)
[0-0] 2019-12-25T18:49:26.477Z INFO webdriver: [POST] http://127.0.0.1:4444/session/7ad49103a958fbdf72f36aa974c04f39/execute/sync
[0-0] 2019-12-25T18:49:26.477Z INFO webdriver: DATA { script: 'return (function (elem) {\n    return (function () {\n\t\t\t\t\treturn this.nextSibling.nextSibling;\n\t\t\t\t}).call(elem);\n  }).apply(null, arguments)',
 args:
  [ { 'element-6066-11e4-a52e-4f735466cecf': 'b6cb6661-b048-418f-b1f8-58ed3f9836fe',
      ELEMENT: 'b6cb6661-b048-418f-b1f8-58ed3f9836fe' } ] }
<h2>React Selector</h2><p>React is another one of the advanced locators in WebdriverIO which has been provided to create custom react components for mobile apps. WebDriverIO has provided a feature that you can directly find an element using the react$() method.</p><p>react$$() method helps to find an array of WebDriverIO elements.</p><p><strong>Syntax:</strong></p><div><div id="highlighter_552549" class="syntaxhighlighter  java"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java plain">react$(‘ReactComponent’);</code></div></div></td></tr></tbody></table></div></div><p><strong>Let’s understand by below React Native Example:</strong></p><pre class="brush:js">import React from 'react'
import ReactDOM from 'react-dom'
  
function RootComponent() {
   return (
       <div>
           RootComponent
       </div>
   )
}
function App() {
   return (<RootComponent />)
}
ReactDOM.render(<App />, document.querySelector('#root'))
</pre><p>In the above example, ‘<strong>RootComponent</strong>’ is a react component and when it renders within HTML element with id=’root’.</p><p>This RootComponent can be found by react$() and below is the example:</p><div><div id="highlighter_389847" class="syntaxhighlighter  java"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java keyword">const</code> <code class="java plain">rootComponent = browser.react$(‘RootComponent’);</code></div></div></td></tr></tbody></table></div></div><h2>Custom Selector</h2><p>One of the most convenient Selenium locators/ selectors in WebdriverIO which comes handy when facing complex scenarios for Selenium automation testing. The Custom selector allows you to use a customized strategy declared by using browser.addLocatorStrategy.</p><p>custom$$() method helps to find an array of WebDriverIO elements.</p><p><strong>Syntax:</strong></p><div><div id="highlighter_972796" class="syntaxhighlighter  java"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java plain">browser.custom$(strategyName, strategyArguments)</code></div></div></td></tr></tbody></table></div></div><p><strong>Example:</strong></p><pre class="brush:js">const assert = require("assert");
describe("Selector Example", function() {
   
   it("Open URL", function() {
       driver.url("https://www.facebook.com/");
   });
    
   it("Custom Selector Example - ", () => {
       browser.addLocatorStrategy("emailById", selector => {
           return document.querySelectorAll(selector);
       });
       const emailID = browser.custom$("emailById", "#email");
emailID.setValue("[email protected]");
   });
});
</pre><p>With the help of addLocatorStrategy(), we have created ‘<strong>emailById</strong>’ custom selector for the email ID field and we can use <strong>emailById</strong> selector using the custom$() method. Internally, WebDriverIO converts custom$() into executeScript() and finds the element.</p><p><strong>Note:</strong> In this WebdriverIO tutorial, we have discussed single $() which helps to deal with a single element. All these selectors can be used with $$() for the array of WebDriverIO.</p><h2>Conclusion</h2><p>WebDriverIO is one of the top JavaScript testing frameworks and when you look at the variety it offers for you to locate elements in a web page, you would be sure to make a note of it for your upcoming projects. It has a very unique selector choice including react$ and custom$ selectors. WebDriverIO has single way to find the element but has different signs for selector e.g * , *=, .(period) and # different. I am sure that this WebdriverIO tutorial will help you to take your knowledge on test automation to the next step. Happy testing!</p><figure class="wp-block-image size-large is-resized"><a href="//www.javacodegeeks.com/register?redirect_to=/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"><img src="//www.javacodegeeks.com/wp-content/uploads/2020/01/Adword-Cyber2.jpg.webp" alt="" class="wp-image-101468" width="698" height="135" srcset="//www.javacodegeeks.com/wp-content/uploads/2020/01/Adword-Cyber2.jpg.webp 930w, //www.javacodegeeks.com/wp-content/uploads/2020/01/Adword-Cyber2-300x58.jpg.webp 300w, //www.javacodegeeks.com/wp-content/uploads/2020/01/Adword-Cyber2-768x149.jpg.webp 768w" sizes="(max-width: 698px) 100vw, 698px"></a></figure><div class="attribution"><table><tbody><tr><td><p>Published on Java Code Geeks with permission by Ramit Dhamija, partner at our <a href="//www.javacodegeeks.com/join-us/jcg/" target="_blank" rel="noopener noreferrer">JCG program</a>. See the original article here: <a href="https://www.lambdatest.com/blog/how-webdriverio-uses-selenium-locators/" target="_blank" rel="noopener noreferrer">How WebdriverIO Uses Selenium Locators in a Unique Way – A WebdriverIO Tutorial With Examples</a></p><p>Opinions expressed by Java Code Geeks contributors are their own.</p></td></tr></tbody></table></div>
<span style="display:none"><a href="//www.javacodegeeks.com/tag/framework" rel="tag">framework</a> <a href="//www.javacodegeeks.com/tag/selenium" rel="tag">Selenium</a> <a href="//www.javacodegeeks.com/tag/webdriverio" rel="tag">WebdriverIO</a></span>             <span style="display:none" class="updated">2020-02-07</span><div style="display:none" class="vcard author" itemprop="author" itemscope="" itemtype="http://schema.org/Person"><strong class="fn" itemprop="name"><a href="//www.javacodegeeks.com/author/ramit-dhamija" title="Posts by Ramit Dhamija" rel="author">Ramit Dhamija</a></strong></div><p class="post-tag">Tagged with: <a href="//www.javacodegeeks.com/tag/framework" rel="tag">framework</a> <a href="//www.javacodegeeks.com/tag/selenium" rel="tag">Selenium</a> <a href="//www.javacodegeeks.com/tag/webdriverio" rel="tag">WebdriverIO</a></p><div class="e3lan-post"><div id="div-gpt-ad-1415445260332-5" style="float:left; margin-bottom: 20px;"><span class="bt-uid-tg" data-uid="5c91633991-158" style="display: none !important"></span></div></div><div class="post-metrics">
<span id="post-ratings-101740" class="post-ratings" itemscope="" itemtype="http://schema.org/Article"><a href="//www.javacodegeeks.com/login?redirect_to=/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"><img src="//www.javacodegeeks.com/wp-content/plugins/wp-postratings/images/thumbs/rating_1_off.png" alt="" title="" class="post-ratings-image"></a><a href="//www.javacodegeeks.com/login?redirect_to=/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"><img src="//www.javacodegeeks.com/wp-content/plugins/wp-postratings/images/thumbs/rating_2_off.png" alt="" title="" class="post-ratings-image"></a> (<em><strong>0</strong> rating, <strong>0</strong> votes</em>)<br><em id="rate-no-perm">You need to be a registered member to rate this.</em><meta itemprop="name" content="How WebdriverIO Uses Selenium Locators in a Unique Way – A WebdriverIO Tutorial With Examples"><meta itemprop="headline" content="How WebdriverIO Uses Selenium Locators in a Unique Way – A WebdriverIO Tutorial With Examples"><meta itemprop="description" content="
In any automation testing framework, finding elements is the most fundamental activity. We have to choose web elements very carefully so that automation script execution can handle static and dynamic..."><meta itemprop="datePublished" content="2020-02-07T07:00:53+02:00"><meta itemprop="dateModified" content="2020-01-29T15:47:28+02:00"><meta itemprop="url" content="https://www.javacodegeeks.com/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"><meta itemprop="author" content="Ramit Dhamija"><meta itemprop="mainEntityOfPage" content="https://www.javacodegeeks.com/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"><div style="display: none;" itemprop="image" itemscope="" itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="https://www.javacodegeeks.com/wp-content/uploads/2012/10/selenium-logo-150x150.jpg"><meta itemprop="width" content="150"><meta itemprop="height" content="150"></div><div style="display: none;" itemprop="publisher" itemscope="" itemtype="https://schema.org/Organization"><meta itemprop="name" content="Java Code Geeks"><meta itemprop="url" content="https://www.javacodegeeks.com"><div itemprop="logo" itemscope="" itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="https://www.javacodegeeks.com/wp-content/uploads/2012/12/JavaCodeGeeks-logo.png"></div></div></span>                           <span class="post-comments"><a href="//www.javacodegeeks.com/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html#respond">Start the discussion</a></span>
<span class="post-views">230 Views</span>
<span class="tieicon-twitter"><a href="https://twitter.com/share?url=https://www.javacodegeeks.com/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html&via=javacodegeeks&text=How WebdriverIO Uses Selenium Locators in a Unique Way – A WebdriverIO Tutorial With Examples" target="_blank">Tweet it!</a></span></div><div class="clear"></div><style>#ulp-inline-XphudgGXMSguAgTT .ulp-submit,#ulp-inline-XphudgGXMSguAgTT .ulp-submit:visited{border-radius:2px !important;background:#326693;border:1px solid #326693;background-image:linear-gradient(#2a567c,#326693)}#ulp-inline-XphudgGXMSguAgTT .ulp-submit:hover,#ulp-inline-XphudgGXMSguAgTT .ulp-submit:active{border-radius:2px !important;background:#2a567c;border:1px solid #326693;background-image:linear-gradient(#326693,#2a567c)}#ulp-inline-XphudgGXMSguAgTT .ulp-input,#ulp-inline-XphudgGXMSguAgTT .ulp-input:hover,#ulp-inline-XphudgGXMSguAgTT .ulp-input:active,#ulp-inline-XphudgGXMSguAgTT .ulp-input:focus,#ulp-inline-XphudgGXMSguAgTT .ulp-checkbox{border-width:1px !important;border-radius:2px !important;border-color:#ccc;background-color:#fff !important;background-color:rgba(255,255,255,.7) !important}#ulp-inline-XphudgGXMSguAgTT,#ulp-inline-XphudgGXMSguAgTT .ulp-content{width:820px;height:455px}#ulp-inline-layer-XphudgGXMSguAgTT-408{width:820px;height:450px}#ulp-inline-layer-XphudgGXMSguAgTT-408{box-shadow:0px 2px 2px 1px #d7e1eb;background-color:#e2ecfa;background-color:rgba(226,236,250,1);border-radius:3px;border:1px solid #d8d8d8;z-index:11;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-395{width:798px;height:64px}#ulp-inline-layer-XphudgGXMSguAgTT-395,#ulp-inline-layer-XphudgGXMSguAgTT-395 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:26px}#ulp-inline-layer-XphudgGXMSguAgTT-395{border-radius:0;z-index:12;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-396{width:473px;height:23px}#ulp-inline-layer-XphudgGXMSguAgTT-396,#ulp-inline-layer-XphudgGXMSguAgTT-396 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:19px}#ulp-inline-layer-XphudgGXMSguAgTT-396{border-radius:0;z-index:13;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-397{width:473px;height:24px}#ulp-inline-layer-XphudgGXMSguAgTT-397,#ulp-inline-layer-XphudgGXMSguAgTT-397 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-397{border-radius:0;z-index:14;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-399{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-399,#ulp-inline-layer-XphudgGXMSguAgTT-399 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-399{border-radius:0;z-index:15;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-400{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-400,#ulp-inline-layer-XphudgGXMSguAgTT-400 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-400{border-radius:0;z-index:16;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-401{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-401,#ulp-inline-layer-XphudgGXMSguAgTT-401 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-401{border-radius:0;z-index:17;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-402{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-402,#ulp-inline-layer-XphudgGXMSguAgTT-402 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-402{border-radius:0;z-index:18;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-403{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-403,#ulp-inline-layer-XphudgGXMSguAgTT-403 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-403{border-radius:0;z-index:19;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-409{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-409,#ulp-inline-layer-XphudgGXMSguAgTT-409 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-409{border-radius:0;z-index:20;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-410{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-410,#ulp-inline-layer-XphudgGXMSguAgTT-410 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-410{border-radius:0;z-index:21;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-404{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-404,#ulp-inline-layer-XphudgGXMSguAgTT-404 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:15px}#ulp-inline-layer-XphudgGXMSguAgTT-404{border-radius:0;z-index:22;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-406{width:473px;height:36px}#ulp-inline-layer-XphudgGXMSguAgTT-406,#ulp-inline-layer-XphudgGXMSguAgTT-406 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#555;font-size:13px}#ulp-inline-layer-XphudgGXMSguAgTT-406{box-shadow:0px 0px 1px 0px #000 inset;background-color:#fff;background-color:rgba(255,255,255,1);border-radius:2px;border:1px solid #ccc;z-index:23;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-862{width:20px;height:20px}#ulp-inline-layer-XphudgGXMSguAgTT-862,#ulp-inline-layer-XphudgGXMSguAgTT-862 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#000;font-size:14px}#ulp-inline-layer-XphudgGXMSguAgTT-862 .ulp-checkbox{font-size:20px}#ulp-inline-layer-XphudgGXMSguAgTT-862 .ulp-checkbox label:after{line-height:16px}#ulp-inline-layer-XphudgGXMSguAgTT-862{background-color:#fff;background-color:rgba(255,255,255,1);border-radius:0;z-index:24;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-863{width:350px;height:5px}#ulp-inline-layer-XphudgGXMSguAgTT-863,#ulp-inline-layer-XphudgGXMSguAgTT-863 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:14px}#ulp-inline-layer-XphudgGXMSguAgTT-863{border-radius:0;z-index:25;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-398{width:80px;height:29px}#ulp-inline-layer-XphudgGXMSguAgTT-398,#ulp-inline-layer-XphudgGXMSguAgTT-398 *{text-align:center;font-family:'arial',arial;font-weight:700;color:#fff;font-size:13px}#ulp-inline-layer-XphudgGXMSguAgTT-398{background-color:#197fd2;background-color:rgba(25,127,210,1);border-radius:2px;z-index:26;text-align:center;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-411{width:473px;height:18px}#ulp-inline-layer-XphudgGXMSguAgTT-411{border-radius:0;z-index:27;text-align:left;padding:0}#ulp-inline-layer-XphudgGXMSguAgTT-407,#ulp-inline-layer-XphudgGXMSguAgTT-407 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:13px}#ulp-inline-layer-XphudgGXMSguAgTT-407{border-radius:0;z-index:28;text-align:left;padding:0}</style><div class="ulp-inline-window" id="ulp-inline-XphudgGXMSguAgTT" data-id="7lQM6oyWL5bTm5lw" data-title="Under the Post Inline" data-width="820" data-height="455" data-close="off" data-enter="on" data-device="all" style="width: 820px; height: 455px; display: block;"><div class="ulp-content" style="transform: translate(0px, 0px) scale(1);"><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-408" data-left="0" data-top="0" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 0px;"></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-395" data-left="10" data-top="7" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 10px; top: 7px;">Do you want to know how to develop your skillset to become a <span style="color: #CAB43D; text-shadow: 1px 1px #835D5D;">Java Rockstar?</span></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-396" data-left="308" data-top="83" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 83px;">Subscribe to our newsletter to start Rocking <span style="text-decoration: underline;">right now!</span></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-397" data-left="308" data-top="107" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 107px;">To get you started we give you our best selling eBooks for <span style="color:#e01404; text-shadow: 1px 1px #C99924; font-size: 15px;">FREE!</span></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-399" data-left="308" data-top="136" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 136px;"><span style="font-weight: bold;">1.</span> JPA Mini Book</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-400" data-left="308" data-top="156" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 156px;"><span style="font-weight: bold;">2.</span> JVM Troubleshooting Guide</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-401" data-left="308" data-top="176" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 176px;"><span style="font-weight: bold;">3.</span> JUnit Tutorial for Unit Testing</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-402" data-left="308" data-top="196" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 196px;"><span style="font-weight: bold;">4.</span> Java Annotations Tutorial</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-403" data-left="308" data-top="216" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 216px;"><span style="font-weight: bold;">5.</span> Java Interview Questions</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-409" data-left="308" data-top="236" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 236px;"><span style="font-weight: bold;">6.</span> Spring Interview Questions</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-410" data-left="308" data-top="256" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 256px;"><span style="font-weight: bold;">7.</span> Android UI Design</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-404" data-left="308" data-top="282" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 282px;">and many more ....</div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-406" data-left="308" data-top="305" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 305px;"><input class="ulp-input ulp-input-field" type="email" name="ulp-email" placeholder="Enter your e-mail..." value="" onfocus="jQuery(this).removeClass('ulp-input-error');"></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-862" data-left="308" data-top="344" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 344px;"><div class="ulp-checkbox" name="ulp-custom-field-4QKR"><input class="ulp-input-field" type="checkbox" name="ulp-custom-field-4QKR" value="off" id="cbHPhodF" onclick="jQuery(this).parent().removeClass('ulp-input-error');"><label for="cbHPhodF"></label></div></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-863" data-left="338" data-top="344" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 338px; top: 344px;">I agree to the <a href="//www.javacodegeeks.com/about/terms-of-use" target="_blank">Terms </a> and <a href="//www.javacodegeeks.com/about/privacy-policy" target="_blank">Privacy Policy</a></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-398" data-left="308" data-top="372" data-appearance="bounceIn" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 372px;"><a href="#" class="ulp-submit ulp-inherited" onclick="return ulp_subscribe(this);" data-label="Sign up" data-loading="Loading...">Sign up</a></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-411" data-left="308" data-top="404" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 308px; top: 404px;"></div><div class="ulp-layer" id="ulp-inline-layer-XphudgGXMSguAgTT-407" data-left="-15" data-top="63" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: -15px; top: 63px;"><img src="/wp-content/uploads/2015/01/books_promo.png.webp" alt="" width="320" height="363"></div></div></div> <script>ulp_custom_handlers["ulp-inline-XphudgGXMSguAgTT"]={before_submit:function(){jQuery('div[id*="-411"]').text('');},after_submit_success:function(){var data={'action':'lp_register_user','email':jQuery('div[id*="-406"] > input[name="ulp-email"]').val()};jQuery.post('https://www.javacodegeeks.com/wp-admin/admin-ajax.php',data,function(response){if(response){jQuery('div[id*="-411"]').text(response);}});},element_id:"ulp-inline-XphudgGXMSguAgTT",popup_id:"7lQM6oyWL5bTm5lw",form:{},errors:{},user_data:{}};</script> <section id="related_posts"><div class="block-head"><h3> Like This Article? Read More From Java Code Geeks</h3><div class="stripe-line"></div></div>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5175626116371315" data-ad-slot="8464724632" data-adsbygoogle-status="done"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script> </section><div class="wpdiscuz_top_clearing"></div><div id="comments" class="comments-area"><div id="respond" style="width: 0;height: 0;clear: both;margin: 0;padding: 0;"></div><div id="wpdcom" class="wpdiscuz_unauth wpd-default wpd-layout-1"><div class="wc_social_plugin_wrapper"></div><div class="wpd-form-wrap"><div class="wpd-form-head"><div class="wpd-sbs-toggle">
<i class="far fa-envelope"></i> <span class="wpd-sbs-title">Subscribe</span> <i class="fas fa-caret-down"></i></div><div class="wpd-auth"><div class="wpd-login"></div></div></div><div class="wpdiscuz-subscribe-bar wpdiscuz-hidden"><form action="//www.javacodegeeks.com/wp-admin/admin-ajax.php?action=wpdAddSubscription" method="post" id="wpdiscuz-subscribe-form"><div class="wpdiscuz-subscribe-form-intro">Notify of</div><div class="wpdiscuz-subscribe-form-option" style="width:40%;">
<select class="wpdiscuz_select" name="wpdiscuzSubscriptionType"><option value="post">new follow-up comments</option><option value="all_comment">new replies to my comments</option>
</select></div><div class="wpdiscuz-item wpdiscuz-subscribe-form-email">
<input class="email" type="email" name="wpdiscuzSubscriptionEmail" required="required" value="" placeholder="Email"></div><div class="wpdiscuz-subscribe-form-button">
<input id="wpdiscuz_subscription_button" class="wpd-prim-button" type="submit" value="›" name="wpdiscuz_subscription_button"></div>
<input type="hidden" id="wpdiscuz_subscribe_form_nonce" name="wpdiscuz_subscribe_form_nonce" value="fd30b1fa70"><input type="hidden" name="_wp_http_referer" value="/2020/02/how-webdriverio-uses-selenium-locators-in-a-unique-way-a-webdriverio-tutorial-with-examples.html"></form></div><div class="wpd-form wpd-form-wrapper wpd-main-form-wrapper" id="wpd-main-form-wrapper-0_0"><div class="wpdiscuz-comment-message" style="display: block;"></div><form class="wpd_comm_form wpd_main_comm_form" method="post" enctype="multipart/form-data"><div class="wpd-field-comment"><div class="wpdiscuz-item wc-field-textarea"><div class="wpdiscuz-textarea-wrap "><div class="wpd-avatar">
<img alt="guest" src="//secure.gravatar.com/avatar/?s=46&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/?s=92&d=mm&r=g 2x" class="avatar avatar-46 photo avatar-default" height="46" width="46"></div><div id="wpd-editor-wraper-0_0" style=""><div id="wpd-editor-0_0" class="ql-container ql-snow"><div class="ql-editor ql-blank" data-gramm="false" contenteditable="true" data-placeholder="Be the First to Comment!"><p><br></p></div><div class="ql-clipboard" contenteditable="true" tabindex="-1"></div><div class="ql-tooltip ql-hidden"><a class="ql-preview" target="_blank" href="about:blank"></a><input type="text" data-formula="e=mc^2" data-link="https://example.com" data-video="Embed URL"><a class="ql-action"></a><a class="ql-remove"></a></div><div class="ql-texteditor"><textarea id="wc-textarea-0_0" required="" name="wc_comment" class="wc_comment wpd-field" style="display: none;"></textarea></div></div><div id="wpd-editor-toolbar-0_0" class="ql-toolbar ql-snow">
<button title="Bold" class="ql-bold" type="button"><svg viewBox="0 0 18 18"> <path class="ql-stroke" d="M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z"></path> <path class="ql-stroke" d="M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z"></path> </svg></button>
<button title="Italic" class="ql-italic" type="button"><svg viewBox="0 0 18 18"> <line class="ql-stroke" x1="7" x2="13" y1="4" y2="4"></line> <line class="ql-stroke" x1="5" x2="11" y1="14" y2="14"></line> <line class="ql-stroke" x1="8" x2="10" y1="14" y2="4"></line> </svg></button>
<button title="Underline" class="ql-underline" type="button"><svg viewBox="0 0 18 18"> <path class="ql-stroke" d="M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3"></path> <rect class="ql-fill" height="1" rx="0.5" ry="0.5" width="12" x="3" y="15"></rect> </svg></button>
<button title="Strike" class="ql-strike" type="button"><svg viewBox="0 0 18 18"> <line class="ql-stroke ql-thin" x1="15.5" x2="2.5" y1="8.5" y2="9.5"></line> <path class="ql-fill" d="M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z"></path> <path class="ql-fill" d="M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z"></path> </svg></button>
<button title="Ordered List" class="ql-list" value="ordered" type="button"><svg viewBox="0 0 18 18"> <line class="ql-stroke" x1="7" x2="15" y1="4" y2="4"></line> <line class="ql-stroke" x1="7" x2="15" y1="9" y2="9"></line> <line class="ql-stroke" x1="7" x2="15" y1="14" y2="14"></line> <line class="ql-stroke ql-thin" x1="2.5" x2="4.5" y1="5.5" y2="5.5"></line> <path class="ql-fill" d="M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z"></path> <path class="ql-stroke ql-thin" d="M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156"></path> <path class="ql-stroke ql-thin" d="M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109"></path> </svg></button>
<button title="Unordered List" class="ql-list" value="bullet" type="button"><svg viewBox="0 0 18 18"> <line class="ql-stroke" x1="6" x2="15" y1="4" y2="4"></line> <line class="ql-stroke" x1="6" x2="15" y1="9" y2="9"></line> <line class="ql-stroke" x1="6" x2="15" y1="14" y2="14"></line> <line class="ql-stroke" x1="3" x2="3" y1="4" y2="4"></line> <line class="ql-stroke" x1="3" x2="3" y1="9" y2="9"></line> <line class="ql-stroke" x1="3" x2="3" y1="14" y2="14"></line> </svg></button>
<button title="Blockquote" class="ql-blockquote" type="button"><svg viewBox="0 0 18 18"> <rect class="ql-fill ql-stroke" height="3" width="3" x="4" y="5"></rect> <rect class="ql-fill ql-stroke" height="3" width="3" x="11" y="5"></rect> <path class="ql-even ql-fill ql-stroke" d="M7,8c0,4.031-3,5-3,5"></path> <path class="ql-even ql-fill ql-stroke" d="M14,8c0,4.031-3,5-3,5"></path> </svg></button>
<button title="Code Block" class="ql-code-block" type="button"><svg viewBox="0 0 18 18"> <polyline class="ql-even ql-stroke" points="5 7 3 9 5 11"></polyline> <polyline class="ql-even ql-stroke" points="13 7 15 9 13 11"></polyline> <line class="ql-stroke" x1="10" x2="8" y1="5" y2="13"></line> </svg></button>
<button title="Link" class="ql-link" type="button"><svg viewBox="0 0 18 18"> <line class="ql-stroke" x1="7" x2="11" y1="7" y2="11"></line> <path class="ql-even ql-stroke" d="M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z"></path> <path class="ql-even ql-stroke" d="M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z"></path> </svg></button>
<button title="Source Code" class="ql-sourcecode" data-wpde_button_name="sourcecode" type="button">{}</button>
<button title="Spoiler" class="ql-spoiler" data-wpde_button_name="spoiler" type="button">[+]</button><div class="wpd-editor-buttons-right">
<span class="wmu-upload-wrap" wpd-tooltip="Attach an image to this comment"><label class="wmu-add"><i class="far fa-image"></i><input style="display:none;" class="wmu-add-files" type="file" name="wmu_files[]" accept="image/*"></label></span><div class="wpd-clear"></div></div></div></div></div></div></div><div class="wpd-form-foot" style="display:none;"><div class="wpdiscuz-textarea-foot"><div class="wpdiscuz-button-actions"><div class="wmu-action-wrap"><div class="wmu-tabs wmu-images-tab wmu-hide"></div></div></div></div><div class="wpd-form-row"><div class="wpd-form-col-left"><div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-user"></i></div>
<input id="wc_name-0_0" value="" required="required" class="wc_name wpd-field" type="text" name="wc_name" placeholder="Name*" maxlength="50" pattern=".{3,50}" title="">
<label for="wc_name-0_0" class="wpdlb">Name*</label></div><div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-at"></i></div>
<input id="wc_email-0_0" value="" required="required" class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email*">
<label for="wc_email-0_0" class="wpdlb">Email*</label></div><div class="wpdiscuz-item wc_website-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-link"></i></div>
<input id="wc_website-0_0" value="" class="wc_website wpd-field" type="text" name="wc_website" placeholder="Website">
<label for="wc_website-0_0" class="wpdlb">Website</label></div></div><div class="wpd-form-col-right"><div class="wpdiscuz-item wpd-field-group wpd-field-checkbox wpd-field-agreement wpd-field-single custom_field_5b07f3252b224-wrapper wpd-required-group wpd-has-desc"><div class="wpd-field-group-title"><div class="wpd-item">
<input id="custom_field_5b07f3252b224-1_0_0" type="checkbox" name="custom_field_5b07f3252b224" value="1" class="custom_field_5b07f3252b224 wpd-field wpd-agreement-checkbox  wpd_agreement_hide " required="">
<label class="wpd-field-label wpd-cursor-pointer" for="custom_field_5b07f3252b224-1_0_0">I agree to the <a href="//www.javacodegeeks.com/about/terms-of-use" target="_blank">Terms</a> and <a href="//www.javacodegeeks.com/about/privacy-policy" target="_blank">Privacy Policy</a></label></div></div><div class="wpd-field-desc">
<i class="far fa-question-circle"></i><span>The comment form collects your name, email and content to allow us keep track of the comments placed on the website.  Please read and accept our website Terms and Privacy Policy to post a comment.</span></div></div><div class="wc-field-submit">
<label class="wpd_label" wpd-tooltip="Notify of new replies to this comment">
<input id="wc_notification_new_comment-0_0" class="wc_notification_new_comment-0_0 wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type">
<span class="wpd_label__text">
<span class="wpd_label__check">
<i class="fas fa-bell wpdicon wpdicon-on"></i>
<i class="fas fa-bell-slash wpdicon wpdicon-off"></i>
</span>
</span>
</label>
<input id="wpd-field-submit-0_0" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment"></div></div><div class="clearfix"></div></div></div>
<input type="hidden" class="wpdiscuz_unique_id" value="0_0" name="wpdiscuz_unique_id"></form></div><div id="wpdiscuz_hidden_secondary_form" style="display: none;"><div class="wpd-form wpd-form-wrapper wpd-secondary-form-wrapper" id="wpd-secondary-form-wrapper-wpdiscuzuniqueid" style="display: none;"><div class="wpdiscuz-comment-message" style="display: block;"></div><div class="wpd-secondary-forms-social-content"></div><div class="clearfix"></div><form class="wpd_comm_form wpd-secondary-form-wrapper" method="post" enctype="multipart/form-data"><div class="wpd-field-comment"><div class="wpdiscuz-item wc-field-textarea"><div class="wpdiscuz-textarea-wrap "><div class="wpd-avatar">
<img alt="guest" src="//secure.gravatar.com/avatar/?s=46&d=mm&r=g" srcset="https://secure.gravatar.com/avatar/?s=92&d=mm&r=g 2x" class="avatar avatar-46 photo avatar-default" height="46" width="46"></div><div id="wpd-editor-wraper-wpdiscuzuniqueid" style="display: none;"><div id="wpd-editor-char-counter-wpdiscuzuniqueid" class="wpd-editor-char-counter"></div><textarea id="wc-textarea-wpdiscuzuniqueid" required="" name="wc_comment" class="wc_comment wpd-field"></textarea><div id="wpd-editor-wpdiscuzuniqueid"></div><div id="wpd-editor-toolbar-wpdiscuzuniqueid">
<button title="Bold" class="ql-bold"></button>
<button title="Italic" class="ql-italic"></button>
<button title="Underline" class="ql-underline"></button>
<button title="Strike" class="ql-strike"></button>
<button title="Ordered List" class="ql-list" value="ordered"></button>
<button title="Unordered List" class="ql-list" value="bullet"></button>
<button title="Blockquote" class="ql-blockquote"></button>
<button title="Code Block" class="ql-code-block"></button>
<button title="Link" class="ql-link"></button>
<button title="Source Code" class="ql-sourcecode" data-wpde_button_name="sourcecode">{}</button>
<button title="Spoiler" class="ql-spoiler" data-wpde_button_name="spoiler">[+]</button><div class="wpd-editor-buttons-right">
<span class="wmu-upload-wrap" wpd-tooltip="Attach an image to this comment"><label class="wmu-add"><i class="far fa-image"></i><input style="display:none;" class="wmu-add-files" type="file" name="wmu_files[]" accept="image/*"></label></span><div class="wpd-clear"></div></div></div></div></div></div></div><div class="wpd-form-foot" style="display:none;"><div class="wpdiscuz-textarea-foot"><div class="wpdiscuz-button-actions"><div class="wmu-action-wrap"><div class="wmu-tabs wmu-images-tab wmu-hide"></div></div></div></div><div class="wpd-form-row"><div class="wpd-form-col-left"><div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-user"></i></div>
<input id="wc_name-wpdiscuzuniqueid" value="" required="required" class="wc_name wpd-field" type="text" name="wc_name" placeholder="Name*" maxlength="50" pattern=".{3,50}" title="">
<label for="wc_name-wpdiscuzuniqueid" class="wpdlb">Name*</label></div><div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-at"></i></div>
<input id="wc_email-wpdiscuzuniqueid" value="" required="required" class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email*">
<label for="wc_email-wpdiscuzuniqueid" class="wpdlb">Email*</label></div><div class="wpdiscuz-item wc_website-wrapper wpd-has-icon"><div class="wpd-field-icon"><i class="fas fa-link"></i></div>
<input id="wc_website-wpdiscuzuniqueid" value="" class="wc_website wpd-field" type="text" name="wc_website" placeholder="Website">
<label for="wc_website-wpdiscuzuniqueid" class="wpdlb">Website</label></div></div><div class="wpd-form-col-right"><div class="wpdiscuz-item wpd-field-group wpd-field-checkbox wpd-field-agreement wpd-field-single custom_field_5b07f3252b224-wrapper wpd-required-group wpd-has-desc"><div class="wpd-field-group-title"><div class="wpd-item">
<input id="custom_field_5b07f3252b224-1_wpdiscuzuniqueid" type="checkbox" name="custom_field_5b07f3252b224" value="1" class="custom_field_5b07f3252b224 wpd-field wpd-agreement-checkbox  wpd_agreement_hide " required="">
<label class="wpd-field-label wpd-cursor-pointer" for="custom_field_5b07f3252b224-1_wpdiscuzuniqueid">I agree to the <a href="//www.javacodegeeks.com/about/terms-of-use" target="_blank">Terms</a> and <a href="//www.javacodegeeks.com/about/privacy-policy" target="_blank">Privacy Policy</a></label></div></div><div class="wpd-field-desc">
<i class="far fa-question-circle"></i><span>The comment form collects your name, email and content to allow us keep track of the comments placed on the website.  Please read and accept our website Terms and Privacy Policy to post a comment.</span></div></div><div class="wc-field-submit">
<label class="wpd_label" wpd-tooltip="Notify of new replies to this comment">
<input id="wc_notification_new_comment-wpdiscuzuniqueid" class="wc_notification_new_comment-wpdiscuzuniqueid wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type">
<span class="wpd_label__text">
<span class="wpd_label__check">
<i class="fas fa-bell wpdicon wpdicon-on"></i>
<i class="fas fa-bell-slash wpdicon wpdicon-off"></i>
</span>
</span>
</label>
<input id="wpd-field-submit-wpdiscuzuniqueid" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment"></div></div><div class="clearfix"></div></div></div>
<input type="hidden" class="wpdiscuz_unique_id" value="wpdiscuzuniqueid" name="wpdiscuz_unique_id"></form></div></div></div><p class="akismet_comment_form_privacy_notice">This site uses Akismet to reduce spam. <a href="https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Learn how your comment data is processed</a>.</p><div id="wpd-threads" class="wpd-thread-wrapper"><div class="wpd-thread-head"><div class="wpd-thread-info ">
<span class="wpdtc">0</span> Comments</div><div class="wpd-space"></div><div class="wpd-thread-filter"><div class="wpd-filter wpdf-reacted wpd_not_clicked" wpd-tooltip="Most reacted comment"><i class="fas fa-bolt"></i></div><div class="wpd-filter wpdf-hottest wpd_not_clicked" wpd-tooltip="Hottest comment thread"><i class="fas fa-fire"></i></div></div></div><div class="wpd-comment-info-bar"><div class="wpd-current-view"><i class="fas fa-quote-left"></i> Inline Feedbacks</div><div class="wpd-filter-view-all">View all comments</div></div><div class="wpd-thread-list"><div class="wpdiscuz-comment-pagination"></div></div></div></div></div><div id="wpdiscuz-loading-bar" class="wpdiscuz-loading-bar-unauth"></div><div id="wpdiscuz-comment-message" class="wpdiscuz-comment-message-unauth"></div><aside class="sidebar"><div id="text-html-widget-2" class="text-html-box"><div id="div-gpt-ad-1415445260332-3" style="width:300px; height:250px;"><span class="bt-uid-tg" data-uid="5c915f3fe8-158" style="display: none !important"></span></div></div><div id="text-html-widget-3" class="text-html-box"><div id="div-gpt-ad-1415445260332-4" style="width:300px; height:250px;"><span class="bt-uid-tg" data-uid="5c915f4655-158" style="display: none !important"></span></div></div><div id="text-html-widget-9" class="widget text-html"><div class="widget-top"><h4>Newsletter</h4><div class="stripe-line"></div></div><div class="widget-container"><div><style>#ulp-inline-HBWzssNQgHpSVlfJ .ulp-submit,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-submit:visited{border-radius:2px !important;background:#326693;border:1px solid #326693;background-image:linear-gradient(#2a567c,#326693)}#ulp-inline-HBWzssNQgHpSVlfJ .ulp-submit:hover,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-submit:active{border-radius:2px !important;background:#2a567c;border:1px solid #326693;background-image:linear-gradient(#326693,#2a567c)}#ulp-inline-HBWzssNQgHpSVlfJ .ulp-input,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-input:hover,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-input:active,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-input:focus,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-checkbox{border-width:1px !important;border-radius:2px !important;border-color:#ccc;background-color:#fff !important;background-color:rgba(255,255,255,.7) !important}#ulp-inline-HBWzssNQgHpSVlfJ,#ulp-inline-HBWzssNQgHpSVlfJ .ulp-content{width:300px;height:306px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-803{width:300px;height:306px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-803,#ulp-inline-layer-HBWzssNQgHpSVlfJ-803 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#000;font-size:14px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-803{background-color:#fff;background-color:rgba(255,255,255,.5);border-radius:0;z-index:11;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-797{width:300px;height:36px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-797,#ulp-inline-layer-HBWzssNQgHpSVlfJ-797 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:13px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-797{border-radius:0;z-index:12;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-802{width:300px;height:110px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-802,#ulp-inline-layer-HBWzssNQgHpSVlfJ-802 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:13px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-802{border-radius:0;z-index:13;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-800{width:300px;height:36px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-800,#ulp-inline-layer-HBWzssNQgHpSVlfJ-800 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#555;font-size:13px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-800{box-shadow:0px 0px 1px 0px #000 inset;background-color:#fff;background-color:rgba(255,255,255,1);border-radius:2px;border:1px solid #ccc;z-index:14;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-872{width:20px;height:20px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-872,#ulp-inline-layer-HBWzssNQgHpSVlfJ-872 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#000;font-size:14px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-872 .ulp-checkbox{font-size:20px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-872 .ulp-checkbox label:after{line-height:16px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-872{background-color:#fff;background-color:rgba(255,255,255,1);border-radius:0;z-index:15;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-873{width:260px;height:3px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-873,#ulp-inline-layer-HBWzssNQgHpSVlfJ-873 *{text-align:left;font-family:'arial',arial;font-weight:400;color:#333;font-size:13px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-873{border-radius:0;z-index:16;text-align:left;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-798{width:67px;height:29px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-798,#ulp-inline-layer-HBWzssNQgHpSVlfJ-798 *{text-align:center;font-family:'arial',arial;font-weight:700;color:#fff;font-size:13px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-798{background-color:#326693;background-color:rgba(50,102,147,1);border-radius:2px;z-index:17;text-align:center;padding:0}#ulp-inline-layer-HBWzssNQgHpSVlfJ-798:hover{background-color:#262626;background-color:rgba(38,38,38,1)}#ulp-inline-layer-HBWzssNQgHpSVlfJ-801{width:300px;height:27px}#ulp-inline-layer-HBWzssNQgHpSVlfJ-801{border-radius:0;z-index:18;text-align:left;padding:0}</style><div class="ulp-inline-window" id="ulp-inline-HBWzssNQgHpSVlfJ" data-id="kVngUfFRCiC2Mqc7" data-title="Sidebar Inline" data-width="300" data-height="306" data-close="off" data-enter="on" data-device="all" style="width: 300px; height: 306px; display: block;"><div class="ulp-content" style="transform: translate(0px, 0px) scale(1);"><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-803" data-left="0" data-top="0" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 0px;"><img src="/wp-content/uploads/2018/01/newsletter-bg.jpg.webp" width="300" height="306"></div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-797" data-left="0" data-top="15" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 15px;">Insiders are already enjoying weekly updates and complimentary whitepapers!</div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-802" data-left="0" data-top="55" data-appearance="bounceInDown" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 55px;"><span style="text-shadow: 1px 1px #D0D0D0; font-weight: bold; font-size: 14pt; display: inline;">Join them now</span> to gain <span style="text-decoration: underline;  font-size: 14pt;">exclusive access</span> to the latest news in the Java world, as well as insights about Android, Scala, Groovy and other related technologies.</div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-800" data-left="0" data-top="170" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 170px;"><input class="ulp-input ulp-input-field" type="email" name="ulp-email" placeholder="Enter your e-mail..." value="" onfocus="jQuery(this).removeClass('ulp-input-error');"></div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-872" data-left="0" data-top="210" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 210px;"><div class="ulp-checkbox" name="ulp-custom-field-PhXo"><input class="ulp-input-field" type="checkbox" name="ulp-custom-field-PhXo" value="off" id="cbsRsocG" onclick="jQuery(this).parent().removeClass('ulp-input-error');"><label for="cbsRsocG"></label></div></div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-873" data-left="30" data-top="210" data-appearance="fade-in" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 30px; top: 210px;">I agree to the <a href="//www.javacodegeeks.com/about/terms-of-use" target="_blank">Terms </a> and <a href="//www.javacodegeeks.com/about/privacy-policy" target="_blank">Privacy Policy</a></div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-798" data-left="0" data-top="240" data-appearance="bounceIn" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 240px;"><a href="#" class="ulp-submit ulp-inherited" onclick="return ulp_subscribe(this);" data-label="Sign up" data-loading="Loading...">Sign up</a></div><div class="ulp-layer" id="ulp-inline-layer-HBWzssNQgHpSVlfJ-801" data-left="0" data-top="273" data-appearance="bounceIn" data-appearance-speed="0" data-appearance-delay="0" data-scrollbar="off" data-confirmation="off" style="left: 0px; top: 273px;"></div></div></div> <script>ulp_custom_handlers["ulp-inline-HBWzssNQgHpSVlfJ"]={before_submit:function(){jQuery('div[id*="-801"]').text('');},after_submit_success:function(){var data={'action':'lp_register_user','email':jQuery('div[id*="-800"] > input[name="ulp-email"]').val()};jQuery.post('https://www.javacodegeeks.com/wp-admin/admin-ajax.php',data,function(response){if(response){jQuery('div[id*="-801"]').text(response);}});},element_id:"ulp-inline-HBWzssNQgHpSVlfJ",popup_id:"kVngUfFRCiC2Mqc7",form:{},errors:{},user_data:{}};</script> </div><div class="clear"></div></div></div><div id="text-html-widget-5" class="widget text-html"><div class="widget-top"><h4>Join Us</h4><div class="stripe-line"></div></div><div class="widget-container"><div><div style="width:150px; height:150px; float:left; margin-top:-10px; margin-left:-10px;">
<img title="Join Us" alt="Join Us" src="/wp-content/uploads/2013/04/w4g-badge-150x150.png.webp" width="150" height="150"></div>
With <label style="border:1px solid #D8D8D8;background:#F0F0F0;border-radius:3px;-moz-border-radius:3px;text-shadow: 1px 1px #D0D0D0;text-align:center;font-weight:bold;padding-left:3px;padding-right:3px">1,240,600</label> monthly unique visitors and over <label style="border:1px solid #D8D8D8;background:#F0F0F0;border-radius:3px;-moz-border-radius:3px;text-shadow: 1px 1px #D0D0D0;text-align:center;font-weight:bold;padding-left:3px;padding-right:3px">500</label> authors we are placed among the top Java related sites around. Constantly being on the lookout for partners; we encourage you to join us. So If you have a blog with unique and interesting content then you should check out our <strong><a href="//www.javacodegeeks.com/join-us/jcg">JCG</a></strong> partners program. You can also be a <strong><a href="//www.javacodegeeks.com/join-us/w4g">guest writer</a></strong> for Java Code Geeks and hone your writing skills!</div><div class="clear"></div></div></div><div id="text-html-widget-4" class="text-html-box"><div id="div-gpt-ad-1415445260332-6" style="width:300px; height:600px;"><span class="bt-uid-tg" data-uid="5c91633126-158" style="display: none !important"></span></div></div></aside><div class="clear"></div><div class="clear"></div><footer id="theme-footer" class="fade-in animated4"><div id="footer-widget-area" class="wide-right-3c container"><div id="footer-first" class="footer-widgets-box"><div id="linkcat-4" class="footer-widget widget_links"><div class="footer-widget-top"><h4>Knowledge Base</h4></div><div class="footer-widget-container"><ul class="xoxo blogroll"><li><a href="//courses.javacodegeeks.com/" target="_blank">Courses</a></li><li><a href="//examples.javacodegeeks.com/" target="_blank">Examples</a></li><li><a href="//www.javacodegeeks.com/minibook" target="_blank">Minibooks</a></li><li><a href="//www.javacodegeeks.com/resources" target="_blank">Resources</a></li><li><a href="//www.javacodegeeks.com/tutorials" target="_blank">Tutorials</a></li></ul></div></div><div id="linkcat-3" class="footer-widget widget_links"><div class="footer-widget-top"><h4>Partners</h4></div><div class="footer-widget-container"><ul class="xoxo blogroll"><li><a href="https://www.mkyong.com/" target="_blank">Mkyong</a></li></ul></div></div><div id="linkcat-5" class="footer-widget widget_links"><div class="footer-widget-top"><h4>The Code Geeks Network</h4></div><div class="footer-widget-container"><ul class="xoxo blogroll"><li><a href="//www.dotnetcodegeeks.com" target="_blank">.NET Code Geeks</a></li><li><a href="//www.javacodegeeks.com" target="_blank">Java Code Geeks</a></li><li><a href="//www.systemcodegeeks.com/" target="_blank">System Code Geeks</a></li><li><a href="//www.webcodegeeks.com/" target="_blank">Web Code Geeks</a></li></ul></div></div></div><div id="footer-second" class="footer-widgets-box"><div id="linkcat-652" class="footer-widget widget_links"><div class="footer-widget-top"><h4>Hall Of Fame</h4></div><div class="footer-widget-container"><ul class="xoxo blogroll"><li><a href="//www.javacodegeeks.com/2010/10/android-full-application-tutorial.html" target="_blank">“Android Full Application Tutorial” series</a></li><li><a href="//www.javacodegeeks.com/2013/01/15-online-learning-websites-that-you-should-check-out.html" target="_blank">11 Online Learning websites that you should check out</a></li><li><a href="//www.javacodegeeks.com/2013/04/advantages-and-disadvantages-of-cloud-computing-cloud-computing-pros-and-cons.html" target="_blank">Advantages and Disadvantages of Cloud Computing – Cloud computing pros and cons</a></li><li><a href="//www.javacodegeeks.com/2011/02/android-google-maps-tutorial.html" target="_blank">Android Google Maps Tutorial</a></li><li><a href="//www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html" target="_blank">Android JSON Parsing with Gson Tutorial</a></li><li><a href="//www.javacodegeeks.com/2010/09/android-location-based-services.html" target="_blank">Android Location Based Services Application – GPS location</a></li><li><a href="//www.javacodegeeks.com/2011/01/android-quick-preferences-tutorial.html" target="_blank">Android Quick Preferences Tutorial</a></li><li><a href="//www.javacodegeeks.com/2013/03/difference-between-comparator-and-comparable-in-java.html" target="_blank">Difference between Comparator and Comparable in Java</a></li><li><a href="//www.javacodegeeks.com/2010/05/gwt-2-spring-3-jpa-2-hibernate-35-2.html" target="_blank">GWT 2 Spring 3 JPA 2 Hibernate 3.5 Tutorial</a></li><li><a href="//www.javacodegeeks.com/2010/08/java-best-practices-vector-arraylist.html" target="_blank">Java Best Practices – Vector vs ArrayList vs HashSet</a></li></ul></div></div></div><div id="footer-third" class="footer-widgets-box"><div id="text-html-widget-7" class="footer-widget text-html"><div class="footer-widget-top"><h4>About Java Code Geeks</h4></div><div class="footer-widget-container"><div>JCGs (Java Code Geeks) is an independent online community focused on creating the ultimate Java to Java developers resource center; targeted at the technical architect, technical team lead (senior developer), project manager and junior developers alike. JCGs serve the Java, SOA, Agile and Telecom communities with daily news written by domain experts, articles, tutorials, reviews, announcements, code snippets and open source projects.</div><div class="clear"></div></div></div><div id="text-html-widget-8" class="footer-widget text-html"><div class="footer-widget-top"><h4>Disclaimer</h4></div><div class="footer-widget-container"><div>All trademarks and registered trademarks appearing on Java Code Geeks are the property of their respective owners. Java is a trademark or registered trademark of Oracle Corporation in the United States and other countries. Examples Java Code Geeks is not connected to Oracle Corporation and is not sponsored by Oracle Corporation.</div><div class="clear"></div></div></div></div></div><div class="clear"></div></footer><div class="clear"></div><div class="footer-bottom fade-in animated4"><div class="container"><div class="social-icons icon_flat">
<a class="ttip" href="https://feeds.feedburner.com/JavaCodeGeeks" target="_blank" original-title="Rss"><i class="tieicon-rss"></i></a><a class="ttip" href="https://www.facebook.com/javacodegeeks" target="_blank" original-title="Facebook"><i class="tieicon-facebook"></i></a><a class="ttip" href="https://twitter.com/javacodegeeks" target="_blank" original-title="Twitter"><i class="tieicon-twitter"></i></a><a class="ttip" href="https://www.linkedin.com/groups/3810709/" target="_blank" original-title="LinkedIn"><i class="tieicon-linkedin"></i></a><a class="ttip" href="https://www.youtube.com/channel/UCxoUc7Rar2q90Gu0nT2ffuQ" target="_blank" original-title="Youtube"><i class="tieicon-youtube"></i></a><a class="ttip" href="https://github.com/javacodegeeks/" target="_blank" original-title="Github"><i class="tieicon-github"></i></a></div><div class="alignleft">
Java Code Geeks and all content copyright © 2010-2020,  <a href="//www.exelixismedia.com/">Exelixis Media P.C.</a> | <a href="//www.javacodegeeks.com/about/terms-of-use">Terms of Use</a> | <a href="//www.javacodegeeks.com/about/privacy-policy">Privacy Policy</a> | <a href="mailto:[email protected]">Contact</a></div></div></div><div id="topcontrol" class="tieicon-up-open" title="Scroll To Top"></div><div id="fb-root"></div><div id="um_upload_single" style="display:none"></div><div id="um_view_photo" style="display:none"><a href="javascript:void(0);" data-action="um_remove_modal" class="um-modal-close"><i class="um-faicon-times"></i></a><div class="um-modal-body photo"><div class="um-modal-photo"></div></div></div><div class="ednpro_main_wrapper ednpro_section " style=""><style type="text/css">.edn-notify-bar.edn-position-top .edn-container{display:none;-webkit-box-shadow:0 1px 1px #757575,inset 0 1px 0 #fbfbfb;-moz-box-shadow:0 1px 1px #757575,inset 0 1px 0 #fbfbfb;box-shadow:0 1px 1px #757575,inset 0 1px 0 #fbfbfb}.edn-notify-bar.edn-position-top .edn_middle_content{padding:1px !important}.edn-notify-bar.edn-position-top .edn-cntrol-wrap{display:none}</style> <script type="text/javascript">jQuery(window).scroll(function(){if(jQuery(this).scrollTop()>0){jQuery('div[class*="edn-position-top"] > div[class*="edn-container"]').slideDown(200);jQuery('div[class*="edn-position-top"] > div[class*="edn-cntrol-wrap"]').slideDown(200);}else{jQuery('div[class*="edn-position-top"] > div[class*="edn-container"]').slideUp(200);jQuery('div[class*="edn-position-top"] > div[class*="edn-cntrol-wrap"]').slideUp(200);}});</script> <style type="text/css">@media (max-width:480px){.edn-notify-bar{display:none}}</style><div class="edn-close-section" id="apex_cookie_1"><style type="text/css">.edn-custom-template[data-barid=apexbar-1] .edn-custom-design-wrapper{font-family:Roboto;font-size:12px;color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-1],.edn-custom-template[data-barid=apexbar-1] .edn-contact-lightbox .edn-contact-lightbox-inner-wrap,.edn-custom-template[data-barid=apexbar-1] .edn-contact-close,.edn-custom-template[data-barid=apexbar-1] .edn-contact-lightbox-inner-wrap{font-family:Roboto;font-size:12px;color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-1] .edn-mulitple-text-content{font-family:Roboto;font-size:12px;color:;display:block}.edn-custom-template[data-barid=apexbar-1] .edn-contact-form-wrap .edn-contact-close{color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-1] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-post-title-wrap .edn-post-title li{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-post-title-wrap .edn-post-title li{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] .edn-tweet-content{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .edn-tweet-content a{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .ticker-wrapper .edn-post-title-readmore{font-family:Roboto;font-size:12px;color:#fff !important;background-color:#999 !important}.edn-custom-template[data-barid=apexbar-1] .ticker-wrapper .ticker-content a,.edn-custom-template[data-barid=apexbar-1] .ticker-wrapper .ticker-content .edn-tweet-content,.edn-custom-template[data-barid=apexbar-1] .ticker-wrapper .edn-mulitple-text-content{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] .ticker-wrapper .ticker-content a{margin-left:8px}.edn-custom-template[data-barid=apexbar-1] .ticker_pattern .edn-ticker-wrapper .ticker-wrapper .ticker-swipe{background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-1] .ticker-content{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .edn-tweet-content{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] .edn-contact-close,input[type=button].edn-contact-submit{background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-1] a{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] a.edn-controls-close{color:}.edn-custom-template[data-barid=apexbar-1] .edn-social-heading-title{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-1] h1,.edn-custom-template[data-barid=apexbar-1] h2,.edn-custom-template[data-barid=apexbar-1] h3,.edn-custom-template[data-barid=apexbar-1] h4,.edn-custom-template[data-barid=apexbar-1] h5,.edn-custom-template[data-barid=apexbar-1] h6,.edn-custom-template[data-barid=apexbar-1] .edn-constant-contact-wrap .edn-front-title h3,.edn-custom-template[data-barid=apexbar-1] .edn-subscribe-form .edn-front-title h3,.edn-custom-template[data-barid=apexbar-1] .edn-mailchimp-wrap .edn-front-title h3{color:;font-size:12px;font-weight:400;text-transform:normal}.edn-custom-template[data-barid=apexbar-1] .edn-constant-contact-wrap .edn-front-title span,.edn-custom-template[data-barid=apexbar-1] .edn-subscribe-form .edn-front-title span,.edn-custom-template[data-barid=apexbar-1] .edn-mailchimp-wrap .edn-front-title span{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .edn-constant-contact-wrap .edn-front-title .show_icon i,.edn-custom-template[data-barid=apexbar-1] .edn-subscribe-form .edn-front-title .show_icon i,.edn-custom-template[data-barid=apexbar-1] .edn-mailchimp-wrap .edn-front-title .show_icon i{color:}.edn-custom-template[data-barid=apexbar-1] .edn-form-field .constant_subscribe,.edn-custom-template[data-barid=apexbar-1] .edn-form-field .edn_mailchimp_submit_ajax,.edn-custom-template[data-barid=apexbar-1] .edn-subscribe-form .edn-form-field .edn_subs_submit_ajax,.edn-custom-template[data-barid=apexbar-1] .edn-custom-contact-link,.edn-custom-template[data-barid=apexbar-1] .edn-temp1-static-button,.edn-custom-template[data-barid=apexbar-1] .edn_static_text .edn-call-action-button a,.edn-custom-template[data-barid=apexbar-1] .edn-call-action-button a,.edn-custom-template[data-barid=apexbar-1] .edn-contact-lightbox .edn-form-field .edn-field input.edn-contact-submit{background:;color:;font-size:10px;font-weight:400;text-transform:normal;font-family:Roboto}.edn-custom-template[data-barid=apexbar-1] .edn_static_text .edn-text-link a,.edn-custom-template[data-barid=apexbar-1] .edn_multiple_text .edn-mulitple-text-content a,edn-custom-template[data-barid=apexbar-1] .edn-multiple-content .edn-mulitple-text-content a,.edn-custom-template[data-barid=apexbar-1] .edn-post-title-wrap .edn-post-title li a{color:;background:;font-size:10px}.edn-custom-template[data-barid=apexbar-1] .edn-mulitple-text-content a{color:;background:;font-size:10px;padding:2px 8px}.edn-custom-template[data-barid=apexbar-1] .edn-top-up-arrow.open,.edn-custom-template[data-barid=apexbar-1] .edn-bottom-down-arrow.open,.edn-custom-template[data-barid=apexbar-1] .edn-bottom-down-arrow.open,.edn-custom-template[data-barid=apexbar-1] .edn-left-arrow,.edn-custom-template[data-barid=apexbar-1] .edn-right-arrow,.edn-custom-template[data-barid=apexbar-1] .edn-cntrol-wrap.ednpro_user-can-close{background-color:transparent;background-image:url("../../images/showhidetoggledown.png") no-repeat scroll 0 0}.edn-custom-template[data-barid=apexbar-1] .edn-cntrol-wrap.ednpro_user-can-close .fa-close{color:#000}.edn-custom-template[data-barid=apexbar-1] .edn-top-up-arrow{background-color:transparent;background-image:url("../../images/showhidetoggletop.png") no-repeat scroll 0 0;border-radius:14px}.edn-custom-template[data-barid=apexbar-1] .edn-bottom-down-arrow{background-color:transparent;border-radius:14px;background-image:url("../../images/showhidetoggledown.png") no-repeat scroll 0 0}.edn-custom-template[data-barid=apexbar-1] .edn_error,.edn-error,.edn-constant-error{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .edn-success,.edn-constant-success{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-1] .edn_error,.edn-error,.edn-constant-error .edn-custom-template[data-barid=apexbar-1] .edn-success,.edn-constant-success,.edn-custom-template[data-barid=apexbar-1] .edn-rss-feed li{font-family:Roboto}.edn-custom-template[data-barid=apexbar-1] .edn-rss-feed li{font-size:12px;color:}.edn-custom-template[data-barid=apexbar-1] .edn-rss-feed li a{color:#fff;background-color:#999}.edn-custom-template[data-barid=apexbar-1] .edn_rss_feed_wrapper .ticker-wrapper .ticker-content a.edn_temp_link{color:#fff !important;background-color:#999 !important}.edn-custom-template[data-barid=apexbar-1] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-custom-template[data-barid=apexbar-1] .edn-post-title-wrap .edn-post-title li{color:}.edn-custom-template[data-barid=apexbar-1].edn-visibility-show-time{display:none}.edn-custom-template[data-barid=apexbar-1] .visibility_show-time{display:none}</style><div data-clickattribute="" class="edn-notify-bar edn-btn-position-right edn-position-top edn-visibility-sticky edn-custom-template edn_close_button_show edn-pro-open-panel-disabled apexnb-single-right show_bar_class" id="edn_custom_template" data-barid="apexbar-1" data-postid="101740">
<input type="hidden" id="effect_type1" value="ednpro_customhtml_settings">
<input type="hidden" class="apexnb-hide-mobile" value="0"><input type="hidden" class="enable_logo_image" value="0">
<input type="hidden" class="edn_social_optons" value="0">
<input type="hidden" class="edn_right_optons" value="1">
<input type="hidden" class="enable_open_panel" value="0"><div class="edn-container apexnb-bartypeednpro_customhtml_settings"><div class="edn-temp-design-wrapper edn-custom-design-wrapper "><div class="edn_middle_content ednpro_customhtml_settings_pattern"><div class="edn_custom_html_wrapper"><div id="div-gpt-ad-1431445244472-0" style="height:90px; width:970px; margin-left: auto; margin-right: auto;"><span class="bt-uid-tg" data-uid="5c915f2bab-158" style="display: none !important"></span></div></div></div></div></div><div class="edn-cntrol-wrap edn-controls-top
ednpro_user-can-close visibility_sticky custom_template">
<a href="javascript:void(0)" class="edn-controls edn-controls-close">
<i class="fa fa-close"></i>
</a></div><input type="hidden" class="edn-ticker-option" id="apexnb-ticker-1" data-ticker-speed="" data-ticker-direction="horizontal" data-ticker-title="" data-ticker-hover="" data-slider-controls="" data-slider-animation="horizontal" data-slider-duration="" data-slider-auto="true" data-slider-transition="" data-slider-adaptive-height="true" data-scroll-controls="" data-scroll-direction="ltr" data-scroll-animation="reveal" data-scroll-speed="" data-scroll-title="">
<input type="hidden" class="edn-visibility-bar-options edn-visibility-option-1" id="apexnb-1" data-show-time-duration="" data-hide-time-duration="" data-visibility-type="sticky" data-close-type="user-can-close" data-close-once="" data-duration-close="" data-show_once_hideshow="" data-show_once_loggedusers="0" data-check_loggedin="0" data-check_userid="0" data-notification_bar_id="1"><div class="apexnb-ccform edn-template-1 edn-popup-form" data-formtype="apexnb-static-custom" data-barid="1"><div class="edn-contact-lightbox" id="edn-static-cf-btn-1-lightbox" style="display: none;"><div class="ednpro_overlay"></div><div class="edn-contact-lightbox-inner-wrap " id="edn-contact-lightbox-inner-wrap-1"><div class="edn-contact-lightbox-inner-content edn-contact-lightbox-inner-wrap apexnb-ccustomform-wrapper "></div></div></div></div></div></div></div><div class="ednpro_main_wrapper ednpro_section " style=""><style type="text/css">.edn-notify-bar.edn-position-bottom .edn-container{display:none;-webkit-box-shadow:0 -1px 1px #757575,inset 0 -1px 0 #fbfbfb;-moz-box-shadow:0 -1px 1px #757575,inset 0 -1px 0 #fbfbfb;box-shadow:0 -1px 1px #757575,inset 0 -1px 0 #fbfbfb;-webkit-transition:inherit;-moz-transition:inherit;transition:inherit}.edn-notify-bar.edn-position-bottom .edn_middle_content{padding:1px !important}.edn-notify-bar.edn-position-bottom .edn-cntrol-wrap{display:none}</style> <script type="text/javascript">jQuery(window).scroll(function(){if(jQuery(this).scrollTop()>0){jQuery('div[class*="edn-position-bottom"] > div[class*="edn-container"]').slideDown(200);jQuery('div[class*="edn-position-bottom"] > div[class*="edn-cntrol-wrap"]').slideDown(200);}else{jQuery('div[class*="edn-position-bottom"] > div[class*="edn-container"]').slideUp(200);jQuery('div[class*="edn-position-bottom"] > div[class*="edn-cntrol-wrap"]').slideUp(200);}});</script> <style type="text/css">@media (max-width:480px){.edn-notify-bar{display:none}}</style><div class="edn-close-section" id="apex_cookie_2"><style type="text/css">.edn-custom-template[data-barid=apexbar-2] .edn-custom-design-wrapper{font-family:Roboto;font-size:12px;color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-2],.edn-custom-template[data-barid=apexbar-2] .edn-contact-lightbox .edn-contact-lightbox-inner-wrap,.edn-custom-template[data-barid=apexbar-2] .edn-contact-close,.edn-custom-template[data-barid=apexbar-2] .edn-contact-lightbox-inner-wrap{font-family:Roboto;font-size:12px;color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-2] .edn-mulitple-text-content{font-family:Roboto;font-size:12px;color:;display:block}.edn-custom-template[data-barid=apexbar-2] .edn-contact-form-wrap .edn-contact-close{color:;background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-2] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-post-title-wrap .edn-post-title li{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-post-title-wrap .edn-post-title li{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] .edn-tweet-content{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .edn-tweet-content a{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .ticker-wrapper .edn-post-title-readmore{font-family:Roboto;font-size:12px;color:#fff !important;background-color:#999 !important}.edn-custom-template[data-barid=apexbar-2] .ticker-wrapper .ticker-content a,.edn-custom-template[data-barid=apexbar-2] .ticker-wrapper .ticker-content .edn-tweet-content,.edn-custom-template[data-barid=apexbar-2] .ticker-wrapper .edn-mulitple-text-content{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] .ticker-wrapper .ticker-content a{margin-left:8px}.edn-custom-template[data-barid=apexbar-2] .ticker_pattern .edn-ticker-wrapper .ticker-wrapper .ticker-swipe{background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-2] .ticker-content{color:;font-family:Roboto;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .edn-tweet-content{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] .edn-contact-close,input[type=button].edn-contact-submit{background-color:rgba(255,255,255,.8)}.edn-custom-template[data-barid=apexbar-2] a{font-family:Roboto;font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] a.edn-controls-close{color:}.edn-custom-template[data-barid=apexbar-2] .edn-social-heading-title{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-2] h1,.edn-custom-template[data-barid=apexbar-2] h2,.edn-custom-template[data-barid=apexbar-2] h3,.edn-custom-template[data-barid=apexbar-2] h4,.edn-custom-template[data-barid=apexbar-2] h5,.edn-custom-template[data-barid=apexbar-2] h6,.edn-custom-template[data-barid=apexbar-2] .edn-constant-contact-wrap .edn-front-title h3,.edn-custom-template[data-barid=apexbar-2] .edn-subscribe-form .edn-front-title h3,.edn-custom-template[data-barid=apexbar-2] .edn-mailchimp-wrap .edn-front-title h3{color:;font-size:12px;font-weight:400;text-transform:normal}.edn-custom-template[data-barid=apexbar-2] .edn-constant-contact-wrap .edn-front-title span,.edn-custom-template[data-barid=apexbar-2] .edn-subscribe-form .edn-front-title span,.edn-custom-template[data-barid=apexbar-2] .edn-mailchimp-wrap .edn-front-title span{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .edn-constant-contact-wrap .edn-front-title .show_icon i,.edn-custom-template[data-barid=apexbar-2] .edn-subscribe-form .edn-front-title .show_icon i,.edn-custom-template[data-barid=apexbar-2] .edn-mailchimp-wrap .edn-front-title .show_icon i{color:}.edn-custom-template[data-barid=apexbar-2] .edn-form-field .constant_subscribe,.edn-custom-template[data-barid=apexbar-2] .edn-form-field .edn_mailchimp_submit_ajax,.edn-custom-template[data-barid=apexbar-2] .edn-subscribe-form .edn-form-field .edn_subs_submit_ajax,.edn-custom-template[data-barid=apexbar-2] .edn-custom-contact-link,.edn-custom-template[data-barid=apexbar-2] .edn-temp1-static-button,.edn-custom-template[data-barid=apexbar-2] .edn_static_text .edn-call-action-button a,.edn-custom-template[data-barid=apexbar-2] .edn-call-action-button a,.edn-custom-template[data-barid=apexbar-2] .edn-contact-lightbox .edn-form-field .edn-field input.edn-contact-submit{background:;color:;font-size:10px;font-weight:400;text-transform:normal;font-family:Roboto}.edn-custom-template[data-barid=apexbar-2] .edn_static_text .edn-text-link a,.edn-custom-template[data-barid=apexbar-2] .edn_multiple_text .edn-mulitple-text-content a,edn-custom-template[data-barid=apexbar-2] .edn-multiple-content .edn-mulitple-text-content a,.edn-custom-template[data-barid=apexbar-2] .edn-post-title-wrap .edn-post-title li a{color:;background:;font-size:10px}.edn-custom-template[data-barid=apexbar-2] .edn-mulitple-text-content a{color:;background:;font-size:10px;padding:2px 8px}.edn-custom-template[data-barid=apexbar-2] .edn-top-up-arrow.open,.edn-custom-template[data-barid=apexbar-2] .edn-bottom-down-arrow.open,.edn-custom-template[data-barid=apexbar-2] .edn-bottom-down-arrow.open,.edn-custom-template[data-barid=apexbar-2] .edn-left-arrow,.edn-custom-template[data-barid=apexbar-2] .edn-right-arrow,.edn-custom-template[data-barid=apexbar-2] .edn-cntrol-wrap.ednpro_user-can-close{background-color:transparent;background-image:url("../../images/showhidetoggledown.png") no-repeat scroll 0 0}.edn-custom-template[data-barid=apexbar-2] .edn-cntrol-wrap.ednpro_user-can-close .fa-close{color:#000}.edn-custom-template[data-barid=apexbar-2] .edn-top-up-arrow{background-color:transparent;background-image:url("../../images/showhidetoggletop.png") no-repeat scroll 0 0;border-radius:14px}.edn-custom-template[data-barid=apexbar-2] .edn-bottom-down-arrow{background-color:transparent;border-radius:14px;background-image:url("../../images/showhidetoggledown.png") no-repeat scroll 0 0}.edn-custom-template[data-barid=apexbar-2] .edn_error,.edn-error,.edn-constant-error{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .edn-success,.edn-constant-success{color:;font-size:12px}.edn-custom-template[data-barid=apexbar-2] .edn_error,.edn-error,.edn-constant-error .edn-custom-template[data-barid=apexbar-2] .edn-success,.edn-constant-success,.edn-custom-template[data-barid=apexbar-2] .edn-rss-feed li{font-family:Roboto}.edn-custom-template[data-barid=apexbar-2] .edn-rss-feed li{font-size:12px;color:}.edn-custom-template[data-barid=apexbar-2] .edn-rss-feed li a{color:#fff;background-color:#999}.edn-custom-template[data-barid=apexbar-2] .edn_rss_feed_wrapper .ticker-wrapper .ticker-content a.edn_temp_link{color:#fff !important;background-color:#999 !important}.edn-custom-template[data-barid=apexbar-2] .edn_static_text,.slider_template_wrapper .edn-tweet-content,.edn-custom-template[data-barid=apexbar-2] .edn-post-title-wrap .edn-post-title li{color:}.edn-custom-template[data-barid=apexbar-2].edn-visibility-show-time{display:none}.edn-custom-template[data-barid=apexbar-2] .visibility_show-time{display:none}</style><div data-clickattribute="" class="edn-notify-bar edn-btn-position-right edn-position-bottom edn-visibility-sticky edn-custom-template edn_close_button_show edn-pro-open-panel-disabled apexnb-single-right show_bar_class" id="edn_custom_template" data-barid="apexbar-2" data-postid="101740">
<input type="hidden" id="effect_type2" value="ednpro_customhtml_settings">
<input type="hidden" class="apexnb-hide-mobile" value="0"><input type="hidden" class="enable_logo_image" value="0">
<input type="hidden" class="edn_social_optons" value="0">
<input type="hidden" class="edn_right_optons" value="1">
<input type="hidden" class="enable_open_panel" value="0"><div class="edn-container apexnb-bartypeednpro_customhtml_settings"><div class="edn-temp-design-wrapper edn-custom-design-wrapper "><div class="edn_middle_content ednpro_customhtml_settings_pattern"><div class="edn_custom_html_wrapper"><div id="div-gpt-ad-1539263132663-0" style="height:90px; width:970px; margin-left: auto; margin-right: auto;"><span class="bt-uid-tg" data-uid="5c915f3336-158" style="display: none !important"></span></div></div></div></div></div><div class="edn-cntrol-wrap edn-controls-bottom
ednpro_user-can-close visibility_sticky custom_template">
<a href="javascript:void(0)" class="edn-controls edn-controls-close">
<i class="fa fa-close"></i>
</a></div><input type="hidden" class="edn-ticker-option" id="apexnb-ticker-2" data-ticker-speed="" data-ticker-direction="horizontal" data-ticker-title="" data-ticker-hover="" data-slider-controls="" data-slider-animation="horizontal" data-slider-duration="" data-slider-auto="true" data-slider-transition="" data-slider-adaptive-height="true" data-scroll-controls="" data-scroll-direction="ltr" data-scroll-animation="reveal" data-scroll-speed="" data-scroll-title="">
<input type="hidden" class="edn-visibility-bar-options edn-visibility-option-2" id="apexnb-2" data-show-time-duration="" data-hide-time-duration="" data-visibility-type="sticky" data-close-type="user-can-close" data-close-once="" data-duration-close="" data-show_once_hideshow="" data-show_once_loggedusers="0" data-check_loggedin="0" data-check_userid="0" data-notification_bar_id="2"><div class="apexnb-ccform edn-template-1 edn-popup-form" data-formtype="apexnb-static-custom" data-barid="2"><div class="edn-contact-lightbox" id="edn-static-cf-btn-2-lightbox" style="display: none;"><div class="ednpro_overlay"></div><div class="edn-contact-lightbox-inner-wrap " id="edn-contact-lightbox-inner-wrap-2"><div class="edn-contact-lightbox-inner-content edn-contact-lightbox-inner-wrap apexnb-ccustomform-wrapper "></div></div></div></div></div></div></div>
<a id="wpdUserContentInfoAnchor" style="display:none;" rel="#wpdUserContentInfo" data-wpd-lity="">wpDiscuz</a><div id="wpdUserContentInfo" style="overflow:auto;background:#FDFDF6;padding:20px;width:600px;max-width:100%;border-radius:6px;" class="lity-hide"></div><div id="wpd-editor-source-code-wrapper-bg"></div><div id="wpd-editor-source-code-wrapper"><textarea id="wpd-editor-source-code"></textarea><button id="wpd-insert-source-code">Insert</button><input type="hidden" id="wpd-editor-uid"></div><div id="div-gpt-ad-1578488895287-0" style="width: 1px; height: 1px;"> <script>googletag.cmd.push(function(){googletag.display('div-gpt-ad-1578488895287-0');});</script> </div>
 <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','UA-12271632-2','auto');ga('send','pageview');</script>  <script type="text/javascript">$jobTitle=jQuery('input[name="job_title-65099"]');$jobTitle.keyup(function(e){smartUM(e)});$jobTitle.blur(function(e){smartUM(e)});function smartUM(e){if(e.keyCode!==undefined&&e.keyCode!=32){return;}
var parts=$jobTitle.val().split(' ');var part0=((parts[0]!==undefined)?parts[0].charAt(0).toUpperCase()+parts[0].slice(1):'empty');var part1=((parts[1]!==undefined)?parts[1].charAt(0).toUpperCase()+parts[1].slice(1):'empty');var part2=((parts[2]!==undefined)?parts[2].charAt(0).toUpperCase()+parts[2].slice(1):'empty');var part3=((parts[3]!==undefined)?parts[3].charAt(0).toUpperCase()+parts[3].slice(1):'empty');var opt01=jQuery('select[name^="job_function_"] option:contains('+part0+')');var opt01a=jQuery('#job_area option:contains('+part0+')');var opt01b=jQuery('#job_level option:contains('+part0+')');var opt02=jQuery('select[name^="job_function_"] option:contains('+part0+' '+part1+')');var opt02a=jQuery('#job_area option:contains('+part0+' '+part1+')');var opt02b=jQuery('#job_level option:contains('+part0+' '+part1+')');var opt11=jQuery('select[name^="job_function_"] option:contains('+part1+')');var opt11a=jQuery('#job_area option:contains('+part1+')');var opt11b=jQuery('#job_level option:contains('+part1+')');var opt12=jQuery('select[name^="job_function_"] option:contains('+part1+' '+part2+')');var opt12a=jQuery('#job_area option:contains('+part1+' '+part2+')');var opt12b=jQuery('#job_level option:contains('+part1+' '+part2+')');var opt21=jQuery('select[name^="job_function_"] option:contains('+part2+')');var opt21a=jQuery('#job_area option:contains('+part2+')');var opt21b=jQuery('#job_level option:contains('+part2+')');var opt22=jQuery('select[name^="job_function_"] option:contains('+part2+' '+part3+')');var opt22a=jQuery('#job_area option:contains('+part2+' '+part3+')');var opt22b=jQuery('#job_level option:contains('+part2+' '+part3+')');var opt31=jQuery('select[name^="job_function_"] option:contains('+part3+')');var opt31a=jQuery('#job_area option:contains('+part3+')');var opt31b=jQuery('#job_level option:contains('+part3+')');var opt_funct=((opt02.val()===undefined)?((opt12.val()===undefined)?((opt22.val()===undefined)?((opt01.val()===undefined)?((opt11.val()===undefined)?((opt21.val()===undefined)?opt31:opt21):opt11):opt01):opt22):opt12):opt02);var opt_area=((opt02a.val()===undefined)?((opt12a.val()===undefined)?((opt22a.val()===undefined)?((opt01a.val()===undefined)?((opt11a.val()===undefined)?((opt21a.val()===undefined)?opt31a:opt21a):opt11a):opt01a):opt22a):opt12a):opt02a);var opt_level=((opt02b.val()===undefined)?((opt12b.val()===undefined)?((opt22b.val()===undefined)?((opt01b.val()===undefined)?((opt11b.val()===undefined)?((opt21b.val()===undefined)?opt31b:opt21b):opt11b):opt01b):opt22b):opt12b):opt02b);if(opt_funct.val()!==undefined){var jb_funct=opt_funct.parent().attr("name");var jb_area=jb_funct.slice(13).charAt(0).toUpperCase()+jb_funct.slice(14);var area=jQuery('#job_area option:contains('+jb_area+')');area.parent().val(area.val()).change();}else{opt_area.parent().val(opt_area.val()).change();}
opt_funct.parent().val(opt_funct.val()).change();opt_level.parent().val(opt_level.val()).change();}</script>  <script type="text/javascript">$workEmail=jQuery('input[name="secondary_user_email-65099"]');$workEmail.blur(function(){checkDB()});function checkDB(e){var parts=$workEmail.val().split('@');var company_domain=parts[1];var data={'action':'company_check','company_domain':company_domain};jQuery.post('/wp-admin/admin-ajax.php',data,function(response){if(response){var data=response.split(';');jQuery('input[name="company_name-65099"]').val(data[0]).change();jQuery('select[name="company_size"]').val(data[1]).change();jQuery('select[name="company_industry"]').val(data[2]).change();jQuery('select[name^="sub_industry_"]').val(data[3]).change();}});}</script>  <script type="text/javascript">$rnp=jQuery('em[id="rate-no-perm"]').val();$img1=jQuery('span[class="post-ratings"] > img[src*="rating_1"]');$img2=jQuery('span[class="post-ratings"] > img[src*="rating_2"]');if($rnp!==undefined){$img1.wrap("<a href='/login'></a>");$img2.wrap("<a href='/login'></a>");}</script> <script type="text/javascript" src="//www.javacodegeeks.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js"></script> <script type="text/javascript">(function(){var corecss=document.createElement('link');var themecss=document.createElement('link');var corecssurl="https://www.javacodegeeks.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b";if(corecss.setAttribute){corecss.setAttribute("rel","stylesheet");corecss.setAttribute("type","text/css");corecss.setAttribute("href",corecssurl);}else{corecss.rel="stylesheet";corecss.href=corecssurl;}
document.head.appendChild(corecss);var themecssurl="https://www.javacodegeeks.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeEclipse.css?ver=3.0.9b";if(themecss.setAttribute){themecss.setAttribute("rel","stylesheet");themecss.setAttribute("type","text/css");themecss.setAttribute("href",themecssurl);}else{themecss.rel="stylesheet";themecss.href=themecssurl;}
document.head.appendChild(themecss);})();SyntaxHighlighter.config.strings.expandSource='+ expand source';SyntaxHighlighter.config.strings.help='?';SyntaxHighlighter.config.strings.alert='SyntaxHighlighter\n\n';SyntaxHighlighter.config.strings.noBrush='Can\'t find brush for: ';SyntaxHighlighter.config.strings.brushNotHtmlScript='Brush wasn\'t configured for html-script option: ';SyntaxHighlighter.defaults['pad-line-numbers']=true;SyntaxHighlighter.defaults['toolbar']=false;SyntaxHighlighter.defaults['wrap-lines']=false;SyntaxHighlighter.all();if(typeof(jQuery)!=='undefined'){jQuery(function($){$(document.body).on('post-load',function(){SyntaxHighlighter.highlight();});});}</script> <script type="text/javascript">var pvcArgsFrontend={"mode":"js","requestURL":"https:\/\/www.javacodegeeks.com\/wp-admin\/admin-ajax.php","postID":"101740","nonce":"75b8a1afd2"};</script> <script type="text/javascript">var ratingsL10n={"plugin_url":"https:\/\/www.javacodegeeks.com\/wp-content\/plugins\/wp-postratings","ajax_url":"https:\/\/www.javacodegeeks.com\/wp-admin\/admin-ajax.php","text_wait":"Please rate only 1 item at a time.","image":"thumbs","image_ext":"png","max":"2","show_loading":"0","show_fading":"0","custom":"1"};var ratings_1_mouseover_image=new Image();ratings_1_mouseover_image.src="https://www.javacodegeeks.com/wp-content/plugins/wp-postratings/images/thumbs/rating_1_over.png";var ratings_2_mouseover_image=new Image();ratings_2_mouseover_image.src="https://www.javacodegeeks.com/wp-content/plugins/wp-postratings/images/thumbs/rating_2_over.png";;</script> <script type="text/javascript">var wpdiscuzAjaxObj={"wc_hide_replies_text":"Hide Replies","wc_show_replies_text":"View Replies","wc_msg_required_fields":"Please fill out required fields","wc_invalid_field":"Some of field value is invalid","wc_error_empty_text":"please fill out this field to comment","wc_error_url_text":"url is invalid","wc_error_email_text":"email address is invalid","wc_invalid_captcha":"Invalid Captcha Code","wc_login_to_vote":"You Must Be Logged In To Vote","wc_deny_voting_from_same_ip":"You are not allowed to vote for this comment","wc_self_vote":"You cannot vote for your comment","wc_vote_only_one_time":"You've already voted for this comment","wc_voting_error":"Voting Error","wc_comment_edit_not_possible":"Sorry, this comment is no longer possible to edit","wc_comment_not_updated":"Sorry, the comment was not updated","wc_comment_not_edited":"You've not made any changes","wc_msg_input_min_length":"Input is too short","wc_msg_input_max_length":"Input is too long","wc_spoiler_title":"Spoiler Title","wc_cannot_rate_again":"You cannot rate again","wc_not_allowed_to_rate":"You're not allowed to rate here","wc_follow_user":"Follow this user","wc_unfollow_user":"Unfollow this user","wc_follow_success":"You started following this comment author","wc_follow_canceled":"You stopped following this comment author.","wc_follow_email_confirm":"Please check your email and confirm the user following request.","wc_follow_email_confirm_fail":"Sorry, we couldn't send confirmation email.","wc_follow_login_to_follow":"Please login to follow users.","wc_follow_impossible":"We are sorry, but you can't follow this user.","wc_follow_not_added":"Following failed. Please try again later.","is_user_logged_in":"","commentListLoadType":"0","commentListUpdateType":"0","commentListUpdateTimer":"30","liveUpdateGuests":"0","wordpressThreadCommentsDepth":"5","wordpressIsPaginate":"0","commentTextMaxLength":null,"commentTextMinLength":"1","storeCommenterData":"100000","isGoodbyeCaptchaActive":"","socialLoginAgreementCheckbox":"0","enableFbLogin":"0","enableFbShare":"0","facebookAppID":"","facebookUseOAuth2":"0","enableGoogleLogin":"0","googleClientID":"","googleClientSecret":"","cookiehash":"4ca58a12718339e5d09b349278a3aac0","isLoadOnlyParentComments":"0","commentFormView":"collapsed","enableDropAnimation":"0","isNativeAjaxEnabled":"1","enableBubble":"0","bubbleLiveUpdate":"0","bubbleHintTimeout":"45","bubbleHintHideTimeout":"1","cookieHideBubbleHint":"wpdiscuz_hide_bubble_hint","bubbleShowNewCommentMessage":"0","bubbleLocation":"content_left","firstLoadWithAjax":"0","wc_copied_to_clipboard":"Copied to clipboard!","inlineFeedbackAttractionType":"blink","loadRichEditor":"1","wpDiscuzReCaptchaSK":"","wpDiscuztheme":"light","wpDiscuzReCaptchaVersion":"2.0","wc_captcha_show_for_guest":"0","wc_captcha_show_for_members":"0","wpDiscuzIsShowOnSubscribeForm":"0","wmuEnabled":"1","wmuInput":"wmu_files","wmuMaxFileCount":"1","wmuMaxFileSize":"2097152","wmuPostMaxSize":"33554432","wmuIsLightbox":"1","wmuMimeTypes":{"jpg|jpeg|jpe":"image\/jpeg","gif":"image\/gif","png":"image\/png","bmp":"image\/bmp","tiff|tif":"image\/tiff","ico":"image\/x-icon"},"wmuPhraseConfirmDelete":"Are you sure you want to delete this attachment?","wmuPhraseNotAllowedFile":"Not allowed file type","wmuPhraseMaxFileCount":"Maximum number of uploaded files is 1","wmuPhraseMaxFileSize":"Maximum upload file size is 2MB","wmuPhrasePostMaxSize":"Maximum post size is 32MB","msgEmptyFile":"File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.","msgPostIdNotExists":"Post ID not exists","msgUploadingNotAllowed":"Sorry, uploading not allowed for this post","msgPermissionDenied":"You do not have sufficient permissions to perform this action","wmuSecurity":"3eb257db89","wmuKeyImages":"images","wmuSingleImageWidth":"auto","wmuSingleImageHeight":"200","version":"7.0.2","wc_post_id":"101740","loadLastCommentId":"0","isCookiesEnabled":"1","dataFilterCallbacks":[],"is_email_field_required":"1","url":"https:\/\/www.javacodegeeks.com\/wp-admin\/admin-ajax.php","customAjaxUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/plugins\/wpdiscuz\/utils\/ajax\/wpdiscuz-ajax.php","bubbleUpdateUrl":"https:\/\/www.javacodegeeks.com\/wp-json\/wpdiscuz\/v1\/update"};var wpdiscuzUCObj={"msgConfirmDeleteComment":"Are you sure you want to delete this comment?","msgConfirmCancelSubscription":"Are you sure you want to cancel this subscription?","msgConfirmCancelFollow":"Are you sure you want to cancel this follow?"};</script> <script type="text/javascript">var wpdiscuzEditorOptions={modules:{toolbar:"",counter:{uniqueID:"",maxcount:0,mincount:1,},},placeholder:'Be the First to Comment!',theme:'snow',debug:'error'};</script> <script type="text/javascript">var tie={"go_to":"Go to...","ajaxurl":"https:\/\/www.javacodegeeks.com\/wp-admin\/admin-ajax.php","your_rating":"Your Rating:","is_singular":"1","reading_indicator":""};</script> <script type="text/javascript">var _wpUtilSettings={"ajax":{"url":"\/wp-admin\/admin-ajax.php"}};</script> <script type="text/javascript">('fetch'in window)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-fetch.min.js"></scr'+'ipt>');(document.contains)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-node-contains.min.js"></scr'+'ipt>');(window.DOMRect)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-dom-rect.min.js"></scr'+'ipt>');(window.URL&&window.URL.prototype&&window.URLSearchParams)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-url.min.js"></scr'+'ipt>');(window.FormData&&window.FormData.prototype.keys)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-formdata.min.js"></scr'+'ipt>');(Element.prototype.matches&&Element.prototype.closest)||document.write('<script src="//www.javacodegeeks.com/wp-includes/js/dist/vendor/wp-polyfill-element-closest.min.js"></scr'+'ipt>');</script> <script type="text/javascript">var um_scripts={"nonce":"b77ba051e2"};</script> <script>var ulp_ajax_url="https://www.javacodegeeks.com/wp-admin/admin-ajax.php";var ulp_count_impressions="on";var ulp_async_init="on";var ulp_css3_enable="on";var ulp_ga_tracking="on";var ulp_km_tracking="off";var ulp_onexit_limits="off";var ulp_no_preload="on";var ulp_campaigns={"ab-nubkDZyVq2DqXba6":["JiEeBs5e7FWcbNNz","km5GtWuxuKEcZxwT"],"ab-fRA4BZ63dGT7F79q":["daeiTszreaarFW2p","rfnSziaatmscImfj","LYzYGkJoiqOh9Kcp"],"ab-i5f1o87SbZo9CxCv":["UkhTQ8fPyK6lDLjk","MkthCm9lGIqlTE4c","52oRXnBYj5cMSZPe","Fx3hN4fM93XvyK2N","ApJykSWNpnqH5quq","fzdvApOWIt45j3nM","dcsFYj5Qst6KZ1mV","GvHbibgOoPesrrVd","qpoSQD8qBLpaZFHz","POn1PwVTOusFCEKd","SNrvkvKCSJPCZE9e","viNsiAURjaBsVLKd","iRFTzWEO7LzZEsic","CX2LNv2Cxcy7yFtE","tSwSAiFBhctUGEsG","bxpKsaffiKPrz8BX","l16NPsHrFNSnaOwH","k2KjXTIK2tmVNZhh","qJPf8hmMzzjd57WW","bDcgmZdGO8iUeg6l","iO8MjcGKOhVHWKFw","WVJRDvl3LbTPKW14","GVYOsinTHwjtJbx2","JjZDRoiJFEwW7ZIK","7tySo91OrNHHGmTx","i8ofbO1QqHaulvnv","TWKj8x1gOGB43vFq","pvOQOjoMKIYGNPYt"],"none":[""]};var ulp_overlays={"HR3qnLILKP1FsV6K":["#fafafa","1","off","middle-center","fadeIn","classic","#ffffff"],"pvOQOjoMKIYGNPYt":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"TWKj8x1gOGB43vFq":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"i8ofbO1QqHaulvnv":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"7tySo91OrNHHGmTx":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"JjZDRoiJFEwW7ZIK":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"GVYOsinTHwjtJbx2":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"WVJRDvl3LbTPKW14":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"iO8MjcGKOhVHWKFw":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"bDcgmZdGO8iUeg6l":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"qJPf8hmMzzjd57WW":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"k2KjXTIK2tmVNZhh":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"l16NPsHrFNSnaOwH":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"bxpKsaffiKPrz8BX":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"tSwSAiFBhctUGEsG":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"CX2LNv2Cxcy7yFtE":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"iRFTzWEO7LzZEsic":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"viNsiAURjaBsVLKd":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"SNrvkvKCSJPCZE9e":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"POn1PwVTOusFCEKd":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"qpoSQD8qBLpaZFHz":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"GvHbibgOoPesrrVd":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"dcsFYj5Qst6KZ1mV":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"fzdvApOWIt45j3nM":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"ApJykSWNpnqH5quq":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"Fx3hN4fM93XvyK2N":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"3OUCBFsZ3Cyh69cg":["","1","off","middle-right","fadeIn","classic","#ffffff"],"bPg3NMopy8SOwFxv":["","1","off","middle-right","fadeIn","classic","#ffffff"],"7lQM6oyWL5bTm5lw":["","1","off","middle-right","fadeIn","classic","#ffffff"],"yagSRxGXceWOXKdL":["","1","off","middle-left","fadeIn","classic","#ffffff"],"mc8yk12eOWB84YOx":["","1","off","middle-left","fadeIn","classic","#ffffff"],"SfiEX51Gg7YJ5f87":["","1","off","middle-left","fadeIn","classic","#ffffff"],"JBGpIw7a45W6ElSd":["","1","off","middle-left","fadeIn","classic","#ffffff"],"R6CIBqQwEyVH8p3P":["","1","off","middle-left","fadeIn","classic","#ffffff"],"9IJ7cDIfGBwWvEor":["","1","off","middle-left","fadeIn","classic","#ffffff"],"QbDda1WJN5dGLyzo":["","1","off","middle-left","fadeIn","classic","#ffffff"],"lFK4fMZhpULqeQUl":["","1","off","middle-left","fadeIn","classic","#ffffff"],"J6lsxGH1wmlPbDBX":["","1","off","middle-left","fadeIn","classic","#ffffff"],"GzGXereCJ66CkIe7":["","1","off","middle-left","fadeIn","classic","#ffffff"],"KUfVf1la8BTi8gpr":["","1","off","middle-left","fadeIn","classic","#ffffff"],"oiCtu6x3AwpaVNPI":["","1","off","middle-left","fadeIn","classic","#ffffff"],"POoohIwajIfAlQyU":["","1","off","middle-left","fadeIn","classic","#ffffff"],"jSOWoWInKJOPdHDL":["","1","off","middle-left","fadeIn","classic","#ffffff"],"MD25RnPuC2vrVItl":["","1","off","middle-left","fadeIn","classic","#ffffff"],"dju8cNQ6UJdyk2W7":["","1","off","middle-left","fadeIn","classic","#ffffff"],"qqpFiv5a5W384Wlg":["","1","off","middle-left","fadeIn","classic","#ffffff"],"RxyUKNKT9HI8ye18":["","1","off","middle-left","fadeIn","classic","#ffffff"],"c4qGwqz2zZ7CesZd":["","1","off","middle-left","fadeIn","classic","#ffffff"],"luHisu6VPL9Mt6IB":["","1","off","middle-left","fadeIn","classic","#ffffff"],"SmTz1FuguNhdx3EL":["","1","off","middle-left","fadeIn","classic","#ffffff"],"UxrJTQorQ61koRSS":["","1","off","middle-left","fadeIn","classic","#ffffff"],"W7z6P4JKWhqanUyq":["","1","off","middle-left","fadeIn","classic","#ffffff"],"Lcy8uILhlHKhh3Oa":["","1","off","middle-left","fadeIn","classic","#ffffff"],"pPtNHTV8vXeWUAbg":["","1","off","middle-left","fadeIn","classic","#ffffff"],"x6sFG6uPniUdaGxM":["","1","off","middle-left","fadeIn","classic","#ffffff"],"evUVoGhmMT2e7Bse":["","1","off","middle-left","fadeIn","classic","#ffffff"],"MOSziNmDYMVLcpBd":["","1","off","middle-left","fadeIn","classic","#ffffff"],"mLDszwXltlaciFhL":["","1","off","middle-left","fadeIn","classic","#ffffff"],"LoQtGl7SXNqSQXjk":["","1","off","middle-left","fadeIn","classic","#ffffff"],"EelW6SUHCPfAItu8":["","1","off","middle-left","fadeIn","classic","#ffffff"],"fiSM7iuOwGJSS5Hx":["","1","off","middle-left","fadeIn","classic","#ffffff"],"w6F4W4SAMiyTapBF":["","1","off","middle-left","fadeIn","classic","#ffffff"],"7eyRwVlMDyxg6Ptw":["","1","off","middle-left","fadeIn","classic","#ffffff"],"TTgvHCI2sS1QhpEZ":["","1","off","middle-left","fadeIn","classic","#ffffff"],"Dax4ouWaZyMz5wey":["","1","off","middle-left","fadeIn","classic","#ffffff"],"52oRXnBYj5cMSZPe":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"l3Fov9NjSByYKceZ":["#fafafa","1","off","middle-center","fadeIn","classic","#ffffff"],"kVngUfFRCiC2Mqc7":["","1","off","middle-left","fadeIn","classic","#ffffff"],"lGy8ZbGvNK3jkh44":["","1","off","middle-left","fadeIn","classic","#ffffff"],"MkthCm9lGIqlTE4c":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"rfnSziaatmscImfj":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"LYzYGkJoiqOh9Kcp":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"ries5dcmMgjJHtYB":["#333333","0.8","on","middle-center","fadeIn","classic","#ffffff"],"9nSvwwH8VVWuWJBf":["","1","off","middle-left","fadeIn","classic","#ffffff"],"UkhTQ8fPyK6lDLjk":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"daeiTszreaarFW2p":["","0.8","off","bottom-center","fadeIn","classic","#ffffff"],"tSzdZeGqNsyPXfl6":["#333333","0.8","on","middle-center","fadeIn","classic","#ffffff"],"JiEeBs5e7FWcbNNz":["#333333","0.8","on","middle-center","fadeIn","classic","#ffffff"],"km5GtWuxuKEcZxwT":["#333333","0.8","on","middle-center","fadeIn","classic","#ffffff"],"JlDLc89DLzIPpdrn":["","1","off","middle-left","fadeIn","classic","#ffffff"],"DdINgEqoOovgkhhk":["","1","off","middle-left","fadeIn","classic","#ffffff"],"cXjlHI7cBJWusoqB":["","1","off","middle-right","fadeIn","classic","#ffffff"],"WeXvIP2x3flSq7BV":["#333333","0.8","on","middle-center","fadeIn","classic","#ffffff"],"AMoliMdl4mr9ETXY":["#fafafa","1","off","middle-center","fadeIn","classic","#ffffff"],"none":["","","","",""]};if(typeof ulp_init=="function"){ulp_init();jQuery(document).ready(function(){ulp_ready();});}else{jQuery(document).ready(function(){ulp_init();ulp_ready();});}</script> <script type="text/javascript">jQuery(window).load(function(){jQuery("input[name='um_request']").val('');});</script>  <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><script type="text/javascript" src="//www.gstatic.com/firebasejs/7.2.2/firebase-app.js" defer="" data-deferred="1"></script><script type="text/javascript" src="//www.gstatic.com/firebasejs/7.2.2/firebase-messaging.js" defer="" data-deferred="1"></script><script data-optimized="1" src="https://www.javacodegeeks.com/wp-content/litespeed/cssjs/96f0b.js" defer=""></script><script data-optimized="1" src="https://www.javacodegeeks.com/wp-content/litespeed/cssjs/ab279.js" defer=""></script>
<!-- Page optimized by LiteSpeed Cache @2020-06-03 15:02:08 -->
<!-- Page generated by LiteSpeed Cache 3.2.1 on 2020-06-03 18:02:08 --></object></fn>