【问题标题】:Loading Selenium Page Objects Based on Browser Window Size根据浏览器窗口大小加载 Selenium 页面对象
【发布时间】:2017-03-29 13:48:29
【问题描述】:

我们正在构建一个 Web 应用程序,该应用程序在页面两侧具有可扩展的工作区,可根据页面大小进行扩展和收缩。当工作场所收缩时,扩展列表的页面对象是不可见的,当在 Angular 2.0 中开发站点时调用该类时进行初始化

我们还使用 Selenium 和 C# 绑定构建了一个自动化测试框架,并使用页面对象模型来运行我们的自动化。是否可以将基于窗口的对象加载到像这样的单个页面类中

public class PageObjectClass
{
    public PageObjectClass(IwebDriver driver)
    {
        PageFactory.InitElements(driver, this)
    }

    private IWebElement anObjectVisibleWhenContracted
    //load an object that is not visible based on window size
}

或者我是否需要在调用类时获取窗口的大小,并在这样的测试脚本中根据窗口宽度有单独的类?

if (driver.Manage().Window.Size.Width < 1280)
{
    someVar = new PageObjectClass(driver):
}
else
{
    someOtherVar = new exp[andedPageObjects
}
//do stuff here

【问题讨论】:

    标签: c# angularjs selenium pageobjects


    【解决方案1】:

    如果您不想在显示某个元素但 Selenium 不与之交互时遇到问题,那么一个好的做法是在 setUp 上最大化您的浏览器窗口。

    如果您不想这样做,Selenium 会在您与之交互时滚动到某个元素。

    所以,回答您的问题 - 您无需更改窗口大小。当您像显示的那样在 C# 中使用 PageObject 时,每个元素将在您寻址时初始化(单击、sendKeys 等)。每次你寻址一个元素时,它都会被再次初始化,Selenium 必须滚动到这个元素。

    但是在某些情况下,当元素显示在页面边缘并且 Selenium 无法正确滚动到该元素时,会出现一些错误。为什么会发生这种情况我不知道,但幸运的是它很少发生。

    【讨论】:

      【解决方案2】:

      这是我自己想出来的。在需要处理可扩展工作空间的类中,我在类中声明了所有变量,并且在运行 PageFactory.InitElements 之前没有为它们分配任何值

      在类构造函数中,我传入了一个 Size 变量以及具有当前窗口大小的 WebDriver。然后所有适合窗口大小的对象都基于此加载

      刚刚进行了一些重组,现在它就像一个魅力一样运作。类结构现在是这样的

      public class ClassName: InheritedClass
      {
      
          #region Page Objects
      
          private IWebElement object1;
          private IWebElement object2;
      
          #endregion
      
          public ClassName(IWebDriver driver, Size winSize)
          {
              PageFactory.InitElements(driver, this);
      
              if (winSize.Width > 1440)
              {
                  object1= driver.FindElement(expanded By phrase locator);
                  object1 = driver.FindElement(expanded By phrase locator);
              }
              else
              {
                  object1= driver.FindElement(contracted By phrase locator);
                  object1 = driver.FindElement(contracted By phrase locator);
              }
          }
      
          #region Page Methods that use these objects
          #endregion
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-07
        • 1970-01-01
        • 2012-03-19
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多