我有一组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.
}
还是有更好的方法来处理这种情况?
答案 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);
使代码的维护和调试更加容易。