Using .ClickItem() to set dropdown takes too long, but .value doesn't fire onChange in the browser.
SOLVED- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Using .ClickItem() to set dropdown takes too long, but .value doesn't fire onChange in the browser.
if (waitForJson):
stopTime = GetTickCount() + 20000;
while (GetTickCount() < stopTime):
if fieldHandle.wItemCount >= 2:
fieldHandle.ClickItem(newName)
if fieldHandle.value == newValue:
break
aqUtils.Delay(100)
else:
fieldHandle.ClickItem(newName)
i = 0
if (waitForJson):
stopTime = GetTickCount() + 20000;
while (GetTickCount() < stopTime):
if fieldHandle.wItemCount >= 2:
fieldHandle.value = newValue
if fieldHandle.value == newValue:
break
Log.Message("Pass: " + str(i) + " Count: " + str(fieldHandle.wItemCount) + " Values [" + fieldHandle.value + "]/[" + newValue + "]")
Log.Message(fieldHandle.innerHTML)
aqUtils.Delay(100)
Aliases.browser.Refresh()
else:
fieldHandle.value = newValue
fieldHandle.Keys("[Up][Down]")
if (waitForJson):
stopTime = GetTickCount() + 20000;
while (GetTickCount() < stopTime):
i = -1
if fieldHandle.wItemCount >= 2:
itemListWork = fieldHandle.wItemList.split(';')
for i in range(len(itemListWork)):
if (itemListWork[i] == newName):
fieldHandle.ClickItem(i)
break
if (i >= 0 & i < len(itemListWork)):
break
else:
aqUtils.Delay(100)
else:
itemListWork = fieldHandle.wItemList.split(';')
for i in range(len(itemListWork)):
if (itemListWork[i] == newName):
fieldHandle.ClickItem(i)
break
Solved! Go to Solution.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I would go with what you're doing with setting the value directly. But then, you should be able to see on your object in the object browser of TestComplete the OnChange event method that you SHOULD be able to call directly. At least, that's how I've done it in the past. YMMV.
Robert Martin
[Hall of Fame]
Please consider giving a Kudo if I write good stuff
----
Why automate? I do automated testing because there's only so much a human being can do and remain healthy. Sleep is a requirement. So, while people sleep, automation that I create does what I've described above in order to make sure that nothing gets past the final defense of the testing group.
I love good food, good books, good friends, and good fun.
Mysterious Gremlin Master
Vegas Thrill Rider
Extensions available
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sounds good.
However, I apparently don't have the right syntax when I'm calling it.
I've tried both the full path: (APP_URL is replaced the actual URL in the script.) Sys.Browser("chrome").Page(APP_URL).Panel(1).Panel("BodyContainer").Panel("page_content").Panel("rightColumn").Panel("scrollable_area").Form(0).Panel(0).Panel(0).Select("RegionId").OnChange()
Or, the alias
fieldHandle.OnChange()
Aliases.browser.page16438.form.selectBureauRegion.OnChange()
But, when I call it, I get the error message:
TypeError: 'NoneType' object is not callable
So, do I need be specific to the Javascript by using iether region.change or updateOffices() or something else?
region.change(function () {
area.val("");
updateOffices();
});
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Have you tried to write your own JavaSciprt function to select values from the drop-down list?
Link:
It's a kind of a workaround.
1) Run your own script, in which you will set the drop-down values
2) obtain the values
3) pass it to the TestComplete scripts
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Based on your response, I did try something along those lines. Since my scripts were correclty setting the drop down values, I left that alone. What I tried to do was call the function that the OnChange() event calls.
I tried this:
# Enter required fields & Save
Aliases.browser.page16438.form.selectBureauRegion.value = bureauRegionId;
curPage = Sys.Browser("*").Page("*")
curPage.contentDocument.Script.updateOffices()
It attempts to call the function direclty, but what I get is this:
I also tried it via eval as below:
# Enter required fields & Save
Aliases.browser.page16438.form.selectBureauRegion.value = bureauRegionId;
curPage = Sys.Browser("*").Page("*")
evalStr = "rootPath=\"" + ProjectSuite.Variables.ServerUrl + "/\"; updateOffices()"
# curPage.contentDocument.Script.eval(evalStr)
When I run this, the call to updateOffices() is apparently skipped. I did enough debugging to determine that this is correct. Occasionally, it will blow up instead.
In both cases, it does not appear to find the JavaScript function. Now, updateOffices() is defined is a .js file that the page loads as part of its operation.
Do I need to do something more for it to find the function?
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
From SmartBear support we got an answer that seems to be good enough.
In short, we switched from Chrome to Firefox for the browser for these test scripts. Using Click Item in Firefox is nearly as fast as the setting the .Value directly and the JSON is automatically triggered.
