Automated tests Selenium 2.0和findBy-自定义属性或Expando属性

Automated tests Selenium 2.0和findBy-自定义属性或Expando属性,automated-tests,webdriver,selenium-webdriver,expando,Automated Tests,Webdriver,Selenium Webdriver,Expando,有人建议通过自定义属性(如expando属性)查找页面上的元素吗 问题:该站点使用大量JSP和动态图像作为按钮。它们没有静态名称或ID。设想一个注册或签出过程,其中每个页面都有一个“下一步”或“继续”按钮,但它会根据当前上下文动态地将您带到某个地方 建议的解决方案:我反复提出的不可自动执行的请求最近得到了btn tag title的自定义expando属性的答复 如果页面上的每个元素都有一个名为btn tag title=的唯一但自定义的属性,那么selenium 2.0每次都能找到可靠的属性吗

有人建议通过自定义属性(如expando属性)查找页面上的元素吗

问题:该站点使用大量JSP和动态图像作为按钮。它们没有静态名称或ID。设想一个注册或签出过程,其中每个页面都有一个“下一步”或“继续”按钮,但它会根据当前上下文动态地将您带到某个地方

建议的解决方案:我反复提出的不可自动执行的请求最近得到了btn tag title的自定义expando属性的答复

如果页面上的每个元素都有一个名为btn tag title=的唯一但自定义的属性,那么selenium 2.0每次都能找到可靠的属性吗

其他建议的解决方案

    log.info(driver.getCurrentUrl());
    assertTrue(selenium.isElementPresent("btn-tag-title=Sign In"));
    selenium.type("name=username", "demo");
    selenium.type("name=password", "tester");
    selenium.click("btn-tag-title=Sign In");
    log.info(driver.getCurrentUrl());

当然。您可以在XPath或CSS定位器中引用元素的任何属性。例如:

assertTrue(selenium.isElementPresent("//*[@btn-tag-title='Sign In']"));
...
selenium.click("//*[@btn-tag-title='Sign In']");


值得一提的是,如果开发人员可以在每个感兴趣的元素上放置一个具有保证唯一值的自定义属性,那么您应该询问他们为什么不将该值放在id=属性中。因为元素ID在HTML、DOM和Selenium中是特殊的,并且元素可以通过其ID比任何其他技术更快地定位。

我曾尝试在页面上使用其他css标识符,问题是这些标识符通常有几种相同的类型。但是,如果我可以通过自定义标记找到这个特定元素作为css定位器,那么它可能会解决这个问题。我会在星期一试一试,如果效果好,我会记下答案。谢谢你,罗斯!
assertTrue(selenium.isElementPresent("css=*[btn-tag-title='Sign In']"));
...
selenium.click("css=*[btn-tag-title='Sign In']");