如何在打字稿中返回动态xpath数组?

时间:2019-03-28 16:09:26

标签: typescript protractor

我有一组xpath,这些xpath需要参数来选择适当的元素。但是,以下方法似乎无效。

var usersRef = firebase.database().ref('users');
var adaRef = usersRef.child('ada');
var adaFirstNameRef = adaRef.child('name/first');
var path = adaFirstNameRef.toString();
// path is now 'https://sample-app.firebaseio.com/users/ada/name/first' 

我最终将使用返回的值,例如:

async returnSection(sectionName: string, childItem: string): Promise<WebElement> {

        let selectedSection = element(by.xpath(`//div[@class='default-name info' and text()='${sectionName}']`));
        let aChildItem = element(by.xpath(`//div[@class='default-name' and text()='${childItem}']`));
        let customName = element(by.xpath(`//div[@class='default-name' and text()='${childItem}']/../../../..//input[@placeholder='None']`));
        let pageObjects: WebElement[] = [selectedSection, aChildItem, customName];
        // return pageObjects[] //I am not able to return this array.

    }

还是有更好的方法来处理这种情况?

2 个答案:

答案 0 :(得分:1)

  

// return pageObjects [] //我无法返回此数组。

您的返回类型注释为Promise<WebElement>,但是您想返回WebElement的数组。

修复

更改

async returnSection(sectionName: string, childItem: string): Promise<WebElement> {

收件人

async returnSection(sectionName: string, childItem: string): Promise<WebElement[]> {

答案 1 :(得分:0)

此解决方案有效,但如果处理不当,则会发生许多未定义的情况。此外,通过这种方法,在VSCode上进行调试将变得更加容易。

要处理这种情况,必须更改方法。像这样返回xpath的字符串,而不是返回WebElement的数组。

    useBenefits(sectionName: string, childItemName: string): string[] {
        let benefitSection = `//div[@class='default-name info' and text()='${sectionName}']`;
        let childItem = `//div[@class='default-name' and text()='${childItemName}']`;
        let customText = `//div[@class='default-name' and text()='${childItem}']/../../../..//input[@placeholder='None']`;
        return new Array(benefitSection, childItem, customText);
    }

现在通过传递参数并将其存储在数组中来使用此函数。将数组元素用作WebElement的xpath。


    let abc1: string[] = this.expertPIAHelper.useSectionBenefits('Achievement', "Confidence");
        let section = element(by.xpath(abc1[0]));
        let child = element(by.xpath(abc1[1]));
        let custom = element(by.xpath(abc1[2]));
        await this.helper.click(section);
        await browser.sleep(1000);
        await this.helper.enterText(custom, "Custom Name");
        await browser.sleep(1000);
        await this.helper.click(this.selectedBenefitSection);
        await browser.sleep(1000);

使代码的维护和调试更加容易。