我有这段HTML代码
我正在使用Testcomplete(Javascript)定位按钮并尝试单击它。我认为这更多是关于我的CSS路径/ Javascript,而不是TestComplete本身。
我尝试了这段代码,它工作正常
var path2 = "#Table > div > table > tfoot > tr > th:last-child > span > div";
var z = Page.QuerySelector(path2);
z.Click(); // Works Fine
我也尝试过这个并且效果很好
var path2 = "#Table > div > table > tfoot > tr > th:nth-child(7) > span > div";
var z = Page.QuerySelector(path2);
z.Click(); //Works Fine
但是当我尝试这个时,它不会找到并单击按钮
var path2 = "#Table > div > table > tfoot > tr"; // path to parent table
var z = Page.QuerySelector(path2);
var y = z.QuerySelector('div.blue'); // Look for the child from that parent with tag div and class blue
Log.message(y.getAttribute("class")); // Will return "button blue w-icon footer-add"
y.Click(); // Will return Javascript Runtime Error. y.Click is not a function
我不知道为什么如果我先找到父节点然后搜索它的子节点,Javascript将无法找到它并单击它?
最佳答案
QuerySelector Method (Page Objects) TestComplete帮助主题中的以下文本可以解释这种现象的原因。
结果值
如果TestComplete Web对象与指定的对象匹配
选择器,则该方法返回此对象。
如果没有匹配的TestComplete测试对象,则该方法返回
适当的HTML对象。
在您的情况下,第一个找到的对象(var z = Page.QuerySelector(path2);
)没有相应的TestComplete对象,因此将返回本机HTML对象。当查询第二个对象(var y = z.QuerySelector('div.blue');
)时,实际上是调用本机QuerySelector
方法,而不是调用TestComplete方法,该方法可以返回TestComplete对象。因此,即使存在相应的TestComplete对象,您也将通过第二次查询获得本机对象。 Click
方法被附加到TestComplete对象,并且在使用本机HTML对象时不能使用它。
因此,在您的情况下,将长途分成两部分的唯一选择似乎是:
var path2 = "#Table > div > table";
var z = Page.QuerySelector(path2);
var y = z.QuerySelector('tfoot > tr > th:last-child > span > div.blue');
Log.message(y.getAttribute("class"));
y.Click();