pip*_*upp 13 java selenium webdriver
我正在遵循Selenium建议的页面对象模式,但是如何为页面创建更专业的WebElement.具体来说,我们的页面上有表格,我编写了一些辅助函数来获取表格的特定行,返回表格的内容等.
目前,这是我创建的具有表的页面对象的片段:
public class PermissionsPage {
@FindBy(id = "studyPermissionsTable")
private WebElement permissionTable;
@FindBy(id = "studyPermissionAddPermission")
private WebElement addPermissionButton;
...
}
Run Code Online (Sandbox Code Playgroud)
所以,我想要做的是将权限表作为一个更加自定义的WebElement,其中包含我之前提到的一些方法.
例如:
public class TableWebElement extends WebElement {
WebElement table;
// a WebDriver needs to come into play here too I think
public List<Map<String, String>> getTableData() {
// code to do this
}
public int getTableSize() {
// code to do this
}
public WebElement getElementFromTable(String id) {
// code to do this
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的,我正在努力解释.我想我正在寻找的是让这个自定义WebElement做一些特定于表的其他东西的方法.将此自定义元素添加到页面,并利用Selenium基于注释将webelements连接到页面的方式.
可能吗?如果是这样,有谁知道如何做到这一点?
Eli*_*ver 28
我创建了一个结合了所有WebDriver接口的接口:
public interface Element extends WebElement, WrapsElement, Locatable {}
Run Code Online (Sandbox Code Playgroud)
它就是包装WebElements在包装元素时可以做的所有事情.
然后是一个实现:
public class ElementImpl implements Element {
private final WebElement element;
public ElementImpl(final WebElement element) {
this.element = element;
}
@Override
public void click() {
element.click();
}
@Override
public void sendKeys(CharSequence... keysToSend) {
element.sendKeys(keysToSend);
}
// And so on, delegates all the way down...
}
Run Code Online (Sandbox Code Playgroud)
然后,例如一个复选框:
public class CheckBox extends ElementImpl {
public CheckBox(WebElement element) {
super(element);
}
public void toggle() {
getWrappedElement().click();
}
public void check() {
if (!isChecked()) {
toggle();
}
}
public void uncheck() {
if (isChecked()) {
toggle();
}
}
public boolean isChecked() {
return getWrappedElement().isSelected();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的脚本中使用它时:
CheckBox cb = new CheckBox(element);
cb.uncheck();
Run Code Online (Sandbox Code Playgroud)
我也提出了一种包装Element课程的方法.你必须创建一些工厂来替换内置的PageFactory,但它是可行的,它提供了很大的灵活性.
我在我的网站上记录了这个过程:
我还有一个名为selophane的项目受到了这个和其他问题的启发:selophane
| 归档时间: |
|
| 查看次数: |
38534 次 |
| 最近记录: |