java - 克隆 "By": Defensive Programming with Selenium

标签 java selenium defensive-copy

因此,我正在为一个正在使用 Selenium 进行测试的网站编写一个面板对象 API,并且由于这个 API 将来可能会被我无法控制的许多人使用,所以我想我也可以将其设置为防御性的(如《Effective Java》中所示)。然而,在返回 By 的克隆时,我遇到了困难。

我期待像 arrayList 这样的方法:

By newBy = new By(oldBy);

不存在,因为 By 是静态生成的。此外,除了 toString() 之外,一旦信息存在,我不知道有什么方法可以从 By 中获取信息。因此,我可以为 By.toString() 编写一个解析器,但这对于这项工作来说似乎需要付出很大的努力,而且启动起来不太优雅。

任何人都可以建议一种在 Selenium 中克隆 By 定位器的不太麻烦的方法吗?

最佳答案

请注意,这只是一种替代方案。

就防御性编程而言,我可以向您推荐一件事,我已经在使用 Selenium 的其他几个自动化框架中完成了...

是包装driver.findElement,然后只接受CSS选择器、ID、Xpath,无论你想要什么。一个例子是这样的:

@Config(
    url="http://wordpress.org",
    browser = Browser.CHROME
)
public class GettingStarted extends AutomationTest {
    @Test
    public void testSeleniumHQ() {
        navigateTo("http://docs.seleniumhq.org")
        .click("a[title='Selenium Projects']")
        .click(By.xpath("//div[contains(@class, 'bigMenu')]//p/a[@href='webdriver/']"))
        .validateTextPresent("Selenium 1.0 + WebDriver = Selenium 2.0")
        ;
    }
}

(使用 this class 摘自 Getting Started with Selenium framework )

在这里,click 被重载以接受字符串(CSS 选择器),但也可以接受 By 类。

如果您希望所有开发人员都使用特定的东西,则不要接受 By,只需让它接受一个字符串,并且该字符串必须是 CSS、ID 或 Xpath(无论您喜欢什么)。这会让它变得更干净一些,而且肯定更巩固。 (您的测试人员将被迫使用 CSS 或您选择的任何内容)

关于java - 克隆 "By": Defensive Programming with Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870890/

相关文章:

java - Oracle APEX Web 应用程序的自动化测试

java - 如何将谷歌地图 fragment 与操作栏选项卡一起使用

JavaFX 拖放交互对象

java - 检查 `Stream` 的所有元素是否相同

java - WebDriver 在 Firefox 中禁用 SEC_ERROR_UNKNOWN_ISSUER

java - 将不可变列表传递给 ImmutableList.copyOf()?

c# - 在构造函数中创建防御副本

Python Selenium 从网站获取图像名称

java - 在 iFrame 内定位元素时遇到问题

java - 这个类可以变得更加不可变吗?