作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在selenium中按类进行抽象,以便我可以在独立于Selenium的页面类中编写代码。我尝试了以下方法:
interface Element{
By id(String id);
By name(String name);
By className(String className);
By tagName(String tagName);
By xpath(String xpath);
By cssSelector(String cssSelector);
By linkText(String linkText);
By partialLinkText(String partialLinkText);
}
class Locator {
public static By id(String id) {
return By.id(id);
}
public static By name(String name) {
return By.name(name);
}
public By className(String className) {
return By.className(className);
}
public By tagName(String tagName) {
return By.tagName(tagName);
}
public By xpath(String xpathExpression) {
return By.xpath(xpathExpression);
}
public By cssSelector(String cssSelector) {
return By.cssSelector(cssSelector);
}
public By linkText(String linkText) {
return By.linkText(linkText);
}
public By partialLinkText(String partialLinkText) {
return By.partialLinkText(partialLinkText);
}
}
通过这种方式,我必须创建 Locator 类对象。我不想创建 Locator 类对象。我希望这些方法是静态的,这样我就可以使用类名调用这些方法。但我们不能有静态方法,因为它们必须在接口(interface)本身中定义。
如何将By class抽象为一个页面类,并实现每个元素都成为一个变量。
最佳答案
尝试创建一个类,该类接受定位器类型和定位器值作为构造函数中的参数。现在将值传递给标识符类以形成定位器。并创建一个包含所有定位器类型的类作为接受字符串值的方法。您可以将所有定位器类型设置为枚举以提高可读性。
伪代码示例:-
Enum locatorType{
id,
class,
...
}
class identifier{
identifier(locatorType lt,String value){
switch(lt.name()){
//call the By.ltname(value) passing the value;
...
}
class BY extends By{
public By id(value){
//form the findElement;
}
...//similarly for all the locators
}
创建标识符后。我们可以使用要传递给方法包装器的对象来使用创建的对象实现所有 webDriver 方法(click、sendKeys 等)。
希望这能解决您的问题。
关于java - 我想在 Selenium 中按类抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115398/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!