【问题标题】:Can we declare an element in Selenium with more than one reference?我们可以在 Selenium 中声明一个具有多个引用的元素吗?
【发布时间】:2021-06-07 05:39:32
【问题描述】:

在我当前的框架(Cucumber、Selenium webdriver、PageObject)中,我们声明元素如下

CreateProfile.java //文件名

public class CreateProfile {
    private static final By FIRST_NAME = By.id("firstNmae");
    private static final By LAST_NAME = By.id("lastNmae");
    private static final By CLICK_SUBMIT = By.xpath(".//span[@title='{submit}']");
}

接下来是进入和点击元素的方法。

我想像这样传递多个元素引用

private static final By CLICK_SUBMIT = By.xpath(".//span[@title='{form_submit}']") || By.id("submit") ;

如果我想为与上述相同的元素传递多个元素引用,该怎么办?

【问题讨论】:

    标签: java selenium selenium-webdriver automation cucumber


    【解决方案1】:

    您可以使用以下css selector.来识别元素

    private static final By CLICK_SUBMIT = By.cssSelector("span[title='{form_submit}'],#submit");
    

    【讨论】:

      【解决方案2】:

      您可以在 Xpath 中使用管道 (|) 使用“或”逻辑:

      private static final By CLICK_SUBMIT = By.xpath("//(span[@title='{form_submit}'] | *[@id='submit'])") 
      

      如果您使用的是FindBy,您可能还希望看到this answer

      【讨论】:

      • 它对我来说按预期工作.. 谢谢
      【解决方案3】:

      Selenium 为这种情况提供了ByAllBy 实现。假设你有一个Bys 的课程:

      class MyBys {
          public static final By CLICK_SUBMIT_BY_TITLE = By.xpath(".//span[@title='{submit}']");
          public static final By CLICK_SUBMIT_BY_ID = By.id("submit");
      }
      

      然后你可以这样做:

      By mySuperBy = new ByAll(MyBys.CLICK_SUBMIT_BY_TITLE, MyBys.CLICK_SUBMIT_BY_ID);
      driver.findElement(mySuperBy).click();
      

      【讨论】:

        【解决方案4】:

        您正在寻找的内容可通过 QAF 以 alternate locator strategy 获得。 您可以参考similar question here。代码如下所示:

        //if my_ele_loc in properties file
        driver.findElement("my_ele_loc").click();
        
        //if my_ele_loc is declared in java
        driver.findElement(my_ele_loc).click();
        

        my_ele_loc 可以在定位器存储库外部代码中或在 java 代码中。它看起来像:

        #out side code in property file
        my_ele_loc=['id=submit','xpath=.//span[@title=\'{form_submit}\'']
        
        //java code
        public static final String my_ele_loc="['id=submit','xpath=.//span[@title=\'{form_submit}\'']"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-09
          • 2020-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多