比如页面上有三个区块。例子scructare每个块都有一个标题和带有按钮的div.action。例子每个人的标题都不一样。我需要选择一个带有文本标题的div,然后点击一个按钮。
我发现这个元素是这样的
return browser.element(by.css('.group-list-item:last-child')).element(by.css('.action'));
但必要的区块不一定是最后一个,可以是1个,也可以是第二个。块的标题不会改变
我假设三个区块的标题为Block1、Block2和Block3。
现在可以通过传递块的标题来点击每个块的按钮,因为块的标题是不会改变的,可以在运行时传递。假设 "group-list-item "是标签div下的类名,按钮的类名是标签按钮下的 "action"。
clickButton(blockTitle: string)。ElementFinder { return element(by.xpath("*/div[contains(@class,'group-list-item')]/div(text()='" + blockTitle+ "']/following-sibling::div")); }。
请看我提供的答案 此处.
我不喜欢使用 xpath
因为它们在动态或频繁更新的应用程序中是非常脆弱的。
动态地给你的元素添加一个id。你也可以在不调用xpath的情况下使用以下选择器。
get buttonByBlockTitle(searchTitle: string) {
return elements(by.css('div.group-list-item').element(by.css(div.tittle).textContent(searchTitle).element(by.css('button.action');
}
public clickButton(searchTitle: string) {
return this.buttonByBlockTitle(searchTitle).click();
}