【问题标题】:Selenium automation with xpath for all browsers适用于所有浏览器的带有 xpath 的 Selenium 自动化
【发布时间】:2016-09-23 21:42:00
【问题描述】:

我是 selenium 自动化的新手,我正在尝试弄清楚如何处理为不同浏览器显示不同 xpath 的元素的代码。

//xpath for IE
 private readonly By ByPermIE = By.XPath("//*[@id='group-permissions']/div[1]/div[2]/span[2]");

//xpath for chrome
 private readonly By ByPermChrome = By.XPath("//*[@id='group-permissions']/div[1]/div[1]/span[2]");

如果我在不同的浏览器上对这个元素执行一些操作,我该如何在测试用例中使用这些元素。我计划将其扩展到另外三个浏览器。那么,我应该在任何地方都使用 if else 条件吗?对于此类情况,是否有任何替代最佳做法?

【问题讨论】:

  • 你能贴出HTML代码吗??
  • 分享 HTML 可能有助于考虑任何其他做法。
  • 解决方案还取决于您如何设计自动化框架,如果您在基类中定义了一个方法并在您的测试用例中调用该方法(继承概念),那么如果基于浏览器
  • 这是一个很好的使用 CSS 选择器而不是 XPath 的用例。如果您向我们展示相关的 HTML,我们可能会推荐一个适用于任何浏览器的 CSS 选择器。

标签: selenium xpath selenium-webdriver automation webdriver


【解决方案1】:

你可以使用下面的 xpath 来解决你的情况。

private readonly By ByPermChrome = By.XPath("//*[@id='group-permissions']/div[1]//span[text() = 'text that span contains']");

【讨论】:

    【解决方案2】:

    xpath 可以尽量写成相对的。不建议写绝对的xpath。

    对于上述情况,请使用在两种浏览器中都可以使用的 xpath。

    By.XPath("//*[@id='group-permissions']//span[2]");
    

    By.XPath("//*[@id='group-permissions']//span[text()='someThing']");
    

    有关 xpath 的更多信息,请参阅 this

    【讨论】:

      【解决方案3】:

      如果你发布你的 html 代码,那就很容易了。但由于没有给出 html,我可以建议您采用如下方式:

      //u can use if condition here
      if(driver.findElements(By.XPath("//*[@id='group-permissions']/div[1]/div[2]/span[2]")).size()==1){
      
          //perform operation here
      }
      
      else
          //perform operation here
      

      这是一种替代方式,因为没有 html 代码。

      如果你给出html代码,我想我们可以建议你更多

      【讨论】:

        【解决方案4】:

        我可以在这里给出的一个建议是您可以在 xpaths 中使用 OR 条件。说 OR OR 。 Xpath OR 一旦碰到第一个正确的就返回成功。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-04
          • 2019-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多