Как использовать CSS и XPath в TestComplete 9?
#1
Отправлено 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?
#2
Отправлено 27 ноября 2012 - 07:02
var obj = Sys.Browser().Page("http://example.com").FindChildByXPath("//*[@id='ctl00_mnuMainn4']/table/tbody/tr/td/a"); obj.Click(); obj.Keys("12345");
#3
Отправлено 27 ноября 2012 - 22:37
{
// 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. - скриншот не актуален
Прикрепленные файлы
#4
Отправлено 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); ...
#5
Отправлено 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."); } }
#6
Отправлено 29 ноября 2012 - 08:31
Если же скрипт не работает в 9.10 - запостите сюда полный текст ошибки и Additional Information из лога.
#7
Отправлено 29 ноября 2012 - 10:03
Вы написали, что используете TC 9. Метод FindChildByXPath появился в версии 9.10, так что если у вас 9.0 - надо обновиться.
Если же скрипт не работает в 9.10 - запостите сюда полный текст ошибки и Additional Information из лога.
Да действительно у меня 9 версия, спасибо за информацию. А CSS в этой версии не работает?
#8
Отправлено 29 ноября 2012 - 10:12
#9
Отправлено 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.");}
#10
Отправлено 29 ноября 2012 - 11:51
Я забыла сказать, что для QuerySelector тоже нужна версия 9.10.
#11
Отправлено 29 ноября 2012 - 21:07
#12
Отправлено 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.
#13
Отправлено 05 декабря 2012 - 01:20
#14
Отправлено 06 декабря 2012 - 08:41
#15
Отправлено 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"); }
#16
Отправлено 11 декабря 2012 - 14:38
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 анонимных