发现元素可见后无法使用递归定位元素
Cannot locate element using recursion after it found it as visible
我的问题:
我正在尝试使用页面对象中的部分单击 Nightwatch 下拉菜单中的选项。我不确定这是部分声明的问题还是我遗漏了与范围相关的内容。问题是它发现该元素是可见的,但是当它尝试单击时会抛出无法使用递归定位它的错误。
我可以尝试使用部分解决此问题吗?
测试中:
var myPage = browser.page.searchPageObject();
var mySection = searchPage.section.setResults;
// [finding and clicking the dropdown so it opens and displays the options]
browser.pause (3000);
browser.expect.section('@setResults').to.be.visible.before(1000);
myPage.myFunction(mySection, '18');
页面对象中:
var searchKeywordCommands = {
myFunction: function (section, x) {
section.expect.element('@set18').to.be.visible.before(2000);
if (x == '18') section.click('@set18');
//[...]
};
module.exports = {
//[.. other elements and commands..]
sections: {
setResults: {
selector: '.select-theme-result', //have also tried with '.select-content' and '.select-options' but with the same result
elements: {
set18: '.select-option[data-value="18"]',
set36: '.select-option[data-value="36"]' //etc
}}}}
这是我的源代码:
当我 运行 这块核心时,它似乎找到了该部分,找到了可见的元素(我也可以清楚地看到它打开了下拉列表并显示了选项)但是当试图点击任何选项,我得到错误: <strong>错误:无法定位元素:Section[name=setResults],Element[name=@set18]”使用:recursion</strong>
这是完整的错误:
我的尝试:
我试图将 set18
选择器声明为一个单独的元素,而不是在部分内部,这样一切正常,但在部分内部不起作用。我还尝试了所有可用的选择器来定义该部分的选择器,但它不适用于其中任何一个。
这就是我正在做的事情(笑)
我假设步骤是(查找保管箱 - 单击保管箱 - select 值)。
var getValueElement = {
getValueSelector: function (x) {
return 'li[data-value="'+ x + '"]';
}
};
module.exports = {
//[.. other elements and commands..]
sections: {
setResults: {
commands:[getValueElement],
selector: 'div[class*="select-theme-result"', //* mean contains,sometime class is too long and unique,also because i am lazy.
elements: {
setHighlight:'li[class*="select-option-highlight"]',
setSelected:'li[class*="select-option-selected"]',
//set18: 'li[data-value="18"]',
//set36: 'li[data-value="36"]'
// i think getValueFunction is better,what if you have 100+ of set.
}}}}
在你的测试中
var myPage = browser.page.searchPageObject();
var mySection = searchPage.section.setResults;
// [finding and clicking the dropdown so it opens and displays the options]
mySection
.click('@dropboxSelector')
.waitForElementVisible('@setHighlight',5000,false,
function(){
var set18 = mySection.getValueElement(18);
mySection.click(set18);
});
Ps:在我的情况下(我认为你的情况也是如此),dropbox 或任何在你的网络应用程序中多次使用的小型第三方 js 框架,所以最好为它创建一个不同的 PageObject,使 pageObject/section 尽可能简单。
我的问题:
我正在尝试使用页面对象中的部分单击 Nightwatch 下拉菜单中的选项。我不确定这是部分声明的问题还是我遗漏了与范围相关的内容。问题是它发现该元素是可见的,但是当它尝试单击时会抛出无法使用递归定位它的错误。
我可以尝试使用部分解决此问题吗?
测试中:
var myPage = browser.page.searchPageObject();
var mySection = searchPage.section.setResults;
// [finding and clicking the dropdown so it opens and displays the options]
browser.pause (3000);
browser.expect.section('@setResults').to.be.visible.before(1000);
myPage.myFunction(mySection, '18');
页面对象中:
var searchKeywordCommands = {
myFunction: function (section, x) {
section.expect.element('@set18').to.be.visible.before(2000);
if (x == '18') section.click('@set18');
//[...]
};
module.exports = {
//[.. other elements and commands..]
sections: {
setResults: {
selector: '.select-theme-result', //have also tried with '.select-content' and '.select-options' but with the same result
elements: {
set18: '.select-option[data-value="18"]',
set36: '.select-option[data-value="36"]' //etc
}}}}
这是我的源代码:
当我 运行 这块核心时,它似乎找到了该部分,找到了可见的元素(我也可以清楚地看到它打开了下拉列表并显示了选项)但是当试图点击任何选项,我得到错误: <strong>错误:无法定位元素:Section[name=setResults],Element[name=@set18]”使用:recursion</strong>
这是完整的错误:
我的尝试:
我试图将 set18
选择器声明为一个单独的元素,而不是在部分内部,这样一切正常,但在部分内部不起作用。我还尝试了所有可用的选择器来定义该部分的选择器,但它不适用于其中任何一个。
这就是我正在做的事情(笑) 我假设步骤是(查找保管箱 - 单击保管箱 - select 值)。
var getValueElement = {
getValueSelector: function (x) {
return 'li[data-value="'+ x + '"]';
}
};
module.exports = {
//[.. other elements and commands..]
sections: {
setResults: {
commands:[getValueElement],
selector: 'div[class*="select-theme-result"', //* mean contains,sometime class is too long and unique,also because i am lazy.
elements: {
setHighlight:'li[class*="select-option-highlight"]',
setSelected:'li[class*="select-option-selected"]',
//set18: 'li[data-value="18"]',
//set36: 'li[data-value="36"]'
// i think getValueFunction is better,what if you have 100+ of set.
}}}}
在你的测试中
var myPage = browser.page.searchPageObject();
var mySection = searchPage.section.setResults;
// [finding and clicking the dropdown so it opens and displays the options]
mySection
.click('@dropboxSelector')
.waitForElementVisible('@setHighlight',5000,false,
function(){
var set18 = mySection.getValueElement(18);
mySection.click(set18);
});
Ps:在我的情况下(我认为你的情况也是如此),dropbox 或任何在你的网络应用程序中多次使用的小型第三方 js 框架,所以最好为它创建一个不同的 PageObject,使 pageObject/section 尽可能简单。