需要使用另一个函数中定义的子元素

时间:2018-09-07 14:18:44

标签: javascript protractor

我尝试寻找解决方案,但找不到能解决我问题的解决方案。我有一个在js文件中编写的函数中定义的元素定位器。我想在另一个js文件中将该定位器用作子元素。我尝试了以下几种方法,但没有帮助我

//Page_Object.js
var digintPO = function () {
    this.catItem_status = element.all(by.xpath("//*[text()='Status']/following-sibling::p")).first();
}
module.exports = new digintPO();

//另一个调用上述定位符的js文件

mainpage.js
var digintpo = require('./Page_Object');
this.verifyCatalog = function () {
    var catItemRow = element(by.cssContainingText("span", "Robert 4")).digintpo.catItem_status;
    catItemRow.getText().then((text) => {
        console.log(text);
    }

我也尝试了其他选择

option1

var elem = digintpo.catItem_status;
var catItemRow = element(by.cssContainingText("span", "Robert 4"))

option2

在此选项中,我尝试将包含的文本解析为page_object文件中的元素,例如

this.catItem_status =element(by.cssContainingText("span", catItem_Name)).element.all(by.xpath("//*[text()='Status']/following-sibling::p")).first();

并尝试调用该元素

var catItemRow = digintpo.catItem_status("Robert 4");

1 个答案:

答案 0 :(得分:1)

量角器的ElementFinder对象具有getLocator()方法,该方法将向您返回该特定元素使用的定位符。看下面的例子。

var ele1 = element(by.id("username"));
var ele2 = element(ele1.getLocator()); //this will return by.id("username");
// Both ele1 and ele2 refers the same element now.  

因此,您可以使用

var catItemRow = element(by.cssContainingText("span", "Robert 4")).element(digintpo.catItem_status.locator());