【问题标题】:Is there any option to give multiple properties of any element in Selenium Webdriver?是否有任何选项可以提供 Selenium Webdriver 中任何元素的多个属性?
【发布时间】:2015-08-31 08:13:27
【问题描述】:

我有一个用 java 语言编写的 Selenium WebDriver 脚本,我需要在多个站点中运行它。基本上脚本是为 1 个站点编写的,但其他站点也遵循相同的架构,并且这些站点中的元素属性也相同。所以我的脚本在所有这些网站上几乎都能正常工作。

问题是,某些站点中的某些元素属性可能不同。那么 Selenium WebDriver 中是否有任何选项可以让我为一个元素传递多个属性。

类似

String elemprop = "Prop1|Prop2|Prop3"  // Properties separated by Pipe
driver.findelement(By.id(elemprop)).click();

所以当它执行时,Selenium Webdriver 应该首先检查 Prop1,然后是 Prop2,然后是 Prop3。

我在 Rational 功能测试器中看到了这个特性。想知道 Selenium Webdriver 是否也提供此功能?

谢谢。

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

    如果您的意思是检查多个属性并且其中一个属性适合您当前特定网站的元素,您可以尝试这样做(在 java 中):

    String xpath = "//*[@id='id1' or @id='id2' or @id='id3']";
    
    driver.findElement(By.xPath(xpath));
    

    【讨论】:

    • 谢谢,我已经接受了这个答案,但是我们可以为其他定位器做类似的事情吗?比如 id、name、css 等...?
    • @Naseem 当然可以。基于 Xpath,您几乎可以做任何您想做的事情。你可以在这里查看我和其他人的答案。 stackoverflow.com/questions/32236054/…
    • @Naseem BTW 我建议您通过配置文件(例如属性文件)而不是硬编码来进行这些配置。这样您就可以轻松控制它。设置键和值的东西,然后为每个相应的网站选择特定的。
    • 谢谢。我会检查这些链接。
    【解决方案2】:

    我建议您应该考虑在这种情况下使用页面对象模型。您可以有一个共同的 ParentPage(),它将定义所有相似页面之间的公共元素和方法,然后是不同的 ChildPage1()、ChildPage2() 等页面,这些页面将唯一标识控件但从父级继承。类似于以下内容:

    public class ParentPage {
        String xpath = null;
        public void commonMethod() {
            driver.findElement(By.xPath(xpath));
        }
    }
    
    public class ChildPage1 extends ParentPage {
        String xpath = "//*[@id='id1']";
    }
    

    这种方法的好处是您通常可以减少来自扩展 XPath 定义的错误和复杂性,并有助于清楚每个页面在做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多