Перейти к содержимому

Фотография

Как использовать CSS и XPath в TestComplete 9?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 27 ноября 2012 - 01:04

Всем добрый день!

Подскажите пожалуйста.

Как использовать CSS и XPath в TestComplete 9?

В селениуме что бы кликнуть на элемент by XPath надо

driver.findElement(By.xpath(".//*[@id='ctl00_mnuMainn4']/table/tbody/tr/td/a")).click();

Чтобы написать что нибудь

driver.findElement(By.xpath(".//*[@id='ctl00_mnuMainn4']/table/tbody/tr/td/a")).sendKeys("12345");

Как подобные команды будут выглядеть на джава для TestComplete 9?
  • 0

#2 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 27 ноября 2012 - 07:02

Нужно использовать метод Page.FindChildByXPath, как-то так:
var obj = Sys.Browser().Page("http://example.com").FindChildByXPath("//*[@id='ctl00_mnuMainn4']/table/tbody/tr/td/a");
obj.Click();
obj.Keys("12345");

  • 1

#3 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 27 ноября 2012 - 22:37

function Test()
{

// Obtain the Page object
var url = "mail.ru";
Browsers.Item(btIExplorer).Run(url);
var page = Sys.Browser("*").Page("*");

// Call the function
var obj = page.FindChildByXPath("//*[@id='mailbox__auth__button']", false);

// Check the result
if (obj != null)
{
// If the element was found, click it
obj.Click();
}
else
{
// If the element was not found, post a message to the log
Log.Error("The element was not found.");
}
}


пытаюсь нажать на кнопку Войти на mail.ru --- не видит обьект, что делать?

P.S. - скриншот не актуален

Прикрепленные файлы

  • Прикрепленный файл  Image 5.png   26,63К   11 Количество загрузок:

  • 0

#4 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 28 ноября 2012 - 07:51

У меня ваш скрипт работает нормально.

Возможно, проблема из-за того, что перед запуском скрипта вы не закрыли браузер, в нем было открыто несколько табов, и Page("*") нашел не ту страницу. В таком случае надо использовать Page(url) вместо Page("*"). И url лучше писать полностью, с http:// и / на конце - в точности, как в адресной строке браузера.

Попробуйте так:
var url = "http://mail.ru/";
Browsers.Item(btIExplorer).Run(url);
var page = Sys.Browser().Page(url);

...

  • 1

#5 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 29 ноября 2012 - 03:21

У меня ваш скрипт работает нормально.

Возможно, проблема из-за того, что перед запуском скрипта вы не закрыли браузер, в нем было открыто несколько табов, и Page("*") нашел не ту страницу. В таком случае надо использовать Page(url) вместо Page("*"). И url лучше писать полностью, с http:// и / на конце - в точности, как в адресной строке браузера.

Попробуйте так:

var url = "http://mail.ru/";
Browsers.Item(btIExplorer).Run(url);
var page = Sys.Browser().Page(url);

...


Привел скрипт к виду который Вы порекомендовали, последил что делает тесткомплит - он запускает браузер, переходит на майл ру, ждет и падает. В чем может быть причина? а то обидно у Вас запускается , а у меня нет)

function Test()
 {

    // Obtain the Page object
    var url = "http://mail.ru/";
    Browsers.Item(btIExplorer).Run(url);
    var page = Sys.Browser().Page(url);

    // Call the function
    var obj = page.FindChildByXPath("//*[@id='mailbox__auth__button']", true);

    // Check the result
  if (obj != null)
    {
      // If the element was found, click it
      obj.Click();
   }
    else
    {
    // If the element was not found, post a message to the log
      Log.Error("The element was not found.");
    }
 }

  • 0

#6 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 29 ноября 2012 - 08:31

Вы написали, что используете TC 9. Метод FindChildByXPath появился в версии 9.10, так что если у вас 9.0 - надо обновиться.

Если же скрипт не работает в 9.10 - запостите сюда полный текст ошибки и Additional Information из лога.
  • 1

#7 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 29 ноября 2012 - 10:03

Вы написали, что используете TC 9. Метод FindChildByXPath появился в версии 9.10, так что если у вас 9.0 - надо обновиться.

Если же скрипт не работает в 9.10 - запостите сюда полный текст ошибки и Additional Information из лога.


Да действительно у меня 9 версия, спасибо за информацию. А CSS в этой версии не работает?
  • 0

#8 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 29 ноября 2012 - 10:12

Если имеются ввиду CSS селекторы, то они тоже поддерживаются - см. Page.QuerySelector и Page.QuerySelectorAll.
  • 1

#9 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 29 ноября 2012 - 10:49

Получился вот такой скрипт для Кнопки Войти, но он не видит кнопку.
Как будет выглядеть правильный вариант для кнопки Войти на майл ру?

unction Test()
{
  var TestedPage, CSSSelector, res;

    var url = "http://mail.ru/";
    Browsers.Item(btIExplorer).Run(url);
    TestedPage = Sys.Browser().Page(url);


  CSSSelector = "#mailbox__auth__button";
  
  // Call the function
  res=TestedPage.QuerySelector(CSSSelector);
  // Check the result
  if (GetVarType(res) != varNull)
      // If the element was found, output its HTML code
      Log.Message(res.outerHTML);
  else
      // If the element was not found, post a warning to the log
      Log.Warning("The element was not found.");}

  • 0

#10 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 29 ноября 2012 - 11:51

Скрипт правильный, и у меня работает. :)

Я забыла сказать, что для QuerySelector тоже нужна версия 9.10.
  • 0

#11 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 29 ноября 2012 - 21:07

А как можно идентифицировать (увидеть) объект на веб странице не используя XPath, CSS, и карту объектов которую создает сам тесткомплит и хранит в проекте?
  • 0

#12 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 30 ноября 2012 - 07:19

А как можно идентифицировать (увидеть) объект на веб странице не используя XPath, CSS, и карту объектов которую создает сам тесткомплит и хранит в проекте?


1) По полному имени (как в Object Browser), например:
var obj = Sys.Browser().Page("http://example.com").Panel(0).Form("login_form").SubmitButton("login");
Но этот способ НЕ рекомендуется, если в иерархии объектов есть динамические объекты (например, с динамическими id).


2) C помощью поиска объекта по значениям его свойств, как-то так:
var obj = Page.FindChild(["ObjectType", "ObjectIdentifier"], ["SubmitButton", "login"], 100 /*глубина поиска*/);
var obj = Page.NativeWebObject.Find("ObjectIdentifier", "login", "input");

См. документацию - Finding Objects on Web Pages.
  • 0

#13 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 05 декабря 2012 - 01:20

А можете привести пример скрипта открытие майл.ру и кликанье на кнопку "Войти" на майл ру?
  • 0

#14 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 06 декабря 2012 - 08:41

Замените в 2) "login" на значение свойства ObjectIdentifier кнопки "Войти", т.е. на "mailbox_auth_button".
  • 0

#15 FreeMan1

FreeMan1

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 10 декабря 2012 - 20:57

Если я правильно понял, то должно получиться что то подобное, но не работает.
Выдает -

'Page' is undefined
Error location:
Unit: "TestProject2\TestProject3js\Script\Unit10"
Line: 8 Column: 1.

function Test()
{
var page
var url = "http://mail.ru/";
Browsers.Item(btIExplorer).Run(url);
TestedPage = Sys.Browser().Page(url);

var obj = Page.FindChild(["ObjectType", "ObjectIdentifier"], ["SubmitButton", "mailbox_auth_button"], 100 /*глубина поиска*/);
var obj = Page.NativeWebObject.Find("ObjectIdentifier", "mailbox_auth_button", "input");

}

  • 0

#16 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 11 декабря 2012 - 14:38

Повнимательнее с именами переменных: у вас переменная для объекта-страницы сначала называется TestedPage, а потом - просто Page. Надо что-то одно.

function Test()
{
  var url = "http://mail.ru/";
  Browsers.Item(btIExplorer).Run(url);
  var Page = Sys.Browser().Page(url);

  // Раскомментировать нужное, закомментировать ненужное
  // var obj = Page.FindChild(["ObjectType", "ObjectIdentifier"], ["SubmitButton", "mailbox_auth_button"], 100 /*глубина поиска*/);
  var obj = Page.NativeWebObject.Find("ObjectIdentifier", "mailbox_auth_button", "input");
}

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных