среда, 12 сентября 2012 г.

Как передавать путь в javascript

Привет всем!

Сегодня я столкнулся с тем, что путь в javascript коде до элемента, у которого нет ни id, ни уникального класса, ни подобных отличительных признаков получается слишком громоздким и некрасивым. Оказывается, есть очень простой, но не всем известный способ избежать этого, о чем я вам и расскажу сегодня. Для примера по обычаю воспользуемся связкой webdriver + C#.



Суть в том, что сначала нужно найти веб элемент с помощью С#, например, по XPath и записать его в виде объекта. Затем остаётся только передать записанный объект в javascript функцию. Да, вот так просто)

Рассмотрим на примере получения ширины изображения:



object[] obj = {_driver.FindElement(By.XPath("path to image"))};
string imageWidth =  
IJavaScriptExecutor.ExecuteScript("return arguments[0].naturalWidth", obj);

Здесь “path to image” - html путь до изображения; найденный элемент (изображение) записывается в переменную obj, которая передается вторым аргументом в метод, исполняющий js скрипт. Первый аргумент - непосредственно кусок кода, который будет выполнятся над объектом. В переменную imageWidth мы получим ширину изображения.

Таким образом, путь указывается не в самом js скрипте, а передается средствами С#, что позволяет улучшить восприятие кода.

2 комментария:

  1. Не очень практичный способ, на мой взгляд. По тому что, XPath не всегда статичен, допустим если войти(авторизоваться)на сайт под учетной записью пользователя у картинки будет один XPath, а если войти администратором XPath уже поменяется. Так же если в процессе разработки добавятся какие нибудь элементы на страницу, XPath так же может поменяться, такие тесты будет тяжело поддерживать.

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

    ОтветитьУдалить