Selenium动态定位器

时间:2015-03-24 17:03:12

标签: java selenium selenium-webdriver

我的问题是关于动态按定位器。 我的Page类通常看起来像这样:

public class MyPage {

    private WebDriver driver;
    private By myFixedLocator = By.xpath(".......");
    private String myDynamicLoactor = "//div[@id = 'someId']" +
                                      "//div[contains( @class, '<className>')]";

    public MyPage(WebDriver driver) {this.driver = driver;}

    public AnotherSuperPage getAnotherPage(String className) {
        By tmpBy = By.xpath(myDynamicLocator.replace("<className>", className));
        driver.findElement(tmpBy);
        return new AnotherSuperPage(driver);
    }

   //for example here: childOne and Two are sub classes of AnotherSuperClass
   public  AnotherChild1Page getChildOne() {return getAnotherPage("childOne");}
   public  AnotherChild1Page getChildTwo() {return getAnotherPage("childTwo")}

}

像myDynamicLocator这样的定位器表示元素,除了一个String部分之外,它们都具有相似的xpath结构。 有没有更好的方法来做到这一点?据我所知,By定位器是最终的,不可移动的。 这也是我不使用Page Factory的原因,因为@FindBy注释我可以使用灵活定位器,如上例所示。 当我有一个By定位器时,我能否以平滑的方式获取文本?因为By.toString()给了我全部信息,包括“xpath”....

1 个答案:

答案 0 :(得分:0)

你也可以通过简单地完成它来实现它:

public AnotherSuperPage getAnotherPage(String className) {
    driver.findElement(By.xpath("//div[@id = 'someId']//div[contains( @class, '" + className +"')]"));
    return new AnotherSuperPage(driver);
}

而不是创建一个字符串对象,然后替换它并将其存储在另一个变量中,尽管无论如何这是内部发生的,但编码较少。希望我理解你...