量角器:如何将定位器写入 select 所需的 div 并单击其上的按钮?
Protractor: How to write a locator to select the desired div and click the button on it?
例如,页面上有三个块。
example scructare
每个块都有一个标题和 div.action 以及一个按钮 example
每个人的标题都不一样。我需要 select 带有文本标题的 div,然后单击按钮
我发现这个元素是这样的
return browser.element(by.css('.group-list-item:last-child')).element(by.css('.action'));
但必要的块不一定是最后一个,可以是1个也可以是第二个。区块标题不变
show element
show structure
我假设三个区块的标题分别是Block1、Block2和Block3
现在可以通过传递块标题为每个块单击按钮,因为块标题不会更改并且可以传递 运行 时间。假设 "group-list-item" 是标签 div 下的 class 名称,并且 class 按钮的名称是标签按钮
下的 "action"
clickButton(blockTitle: string): ElementFinder {
return element(by.xpath("*//div[contains(@class,'group-list-item')]//div(text()='" + blockTitle+ "']//following-sibling::div"));
}
看看我提供的答案here。
我不喜欢使用 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();
}
例如,页面上有三个块。 example scructare 每个块都有一个标题和 div.action 以及一个按钮 example 每个人的标题都不一样。我需要 select 带有文本标题的 div,然后单击按钮
我发现这个元素是这样的
return browser.element(by.css('.group-list-item:last-child')).element(by.css('.action'));
但必要的块不一定是最后一个,可以是1个也可以是第二个。区块标题不变
show element show structure
我假设三个区块的标题分别是Block1、Block2和Block3
现在可以通过传递块标题为每个块单击按钮,因为块标题不会更改并且可以传递 运行 时间。假设 "group-list-item" 是标签 div 下的 class 名称,并且 class 按钮的名称是标签按钮
下的 "action"clickButton(blockTitle: string): ElementFinder { return element(by.xpath("*//div[contains(@class,'group-list-item')]//div(text()='" + blockTitle+ "']//following-sibling::div")); }
看看我提供的答案here。
我不喜欢使用 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();
}