当前位置: 首页 > 知识库问答 >
问题:

如何在页面对象模型设计中使用selenium ExpectedConditions?

陶胤运
2023-03-14

希望我不是第一个遇到这个问题的人。

public class PageObject {

    public IWebElement Element
    {
        get { return DriverContext.Driver.FindElement(By.XPath(Resources.Element)); }
    }
}

问题是我还需要检查该元素在页面上是否可见,并且在执行checked之前它会出错(例如,使用WebDriverWait,将ExpectedConditions.ElementisVisible(by)传递给.Until方法)。

我如何将IWebElement和By locator清晰地分开,并允许在需要的地方进行这种明确的等待/检查?

TLDR-如何维护页面对象模型设计,同时还可以灵活地使用基于元素的By定位器的显式等待。

共有1个答案

井学
2023-03-14

我一直使用页面对象,但我在类的顶部有定位器,而不是元素。然后我使用定位器按需要点击按钮等。这样做的好处是我只在需要的时候访问页面上的元素,这样就避免了过时的元素异常等。请参阅下面的一个简单示例。

class SamplePage
{
    public IWebDriver Driver;
    private By waitForLocator = By.Id("sampleId");

    // please put the variable declarations in alphabetical order
    private By sampleElementLocator = By.Id("sampleId");

    public SamplePage(IWebDriver webDriver)
    {
        this.Driver = webDriver;

        // wait for page to finish loading
        new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(waitForLocator));

        // see if we're on the right page
        if (!Driver.Url.Contains("samplePage.jsp"))
        {
            throw new InvalidOperationException("This is not the Sample page. Current URL: " + Driver.Url);
        }
    }

    public void ClickSampleElement()
    {
        Driver.FindElement(sampleElementLocator).Click();
    }
}

我建议不要将定位器存储在一个单独的文件中,因为这打破了page object model的一个咒语,即与页面有关的所有内容都放在page object中。除了打开一个文件之外,您不需要打开任何东西就可以对Page X(Page对象类)进行任何操作。

 类似资料:
  • 我正在进行UI自动化测试,使用POM与Python和Selenium。我想知道如何处理重复的测试用例。 例如,您有两个网页:登录页和主页。我想测试三个测试用例。 未登录的主页功能:登录前测试主页。py (1和3有很多共同点。3有额外的功能。1是3的子集) 每个测试用例有三个文件,我已经实现了1和2。但是对于第三个模块,我只是从1和2模块中导入了相关函数。 问题是验证登录是否重复。在这种情况下,您是

  • 我的网页上有一个按钮,一旦输入所需的信息,我想点击它。我目前正在使用By来建立页面的所有元素,但想使用WebElements作为这个按钮,然后使用Actions稍后单击它。我应该如何在我的页面对象类中做到这一点。 我尝试了以下方法: 但在以TestNG的形式运行测试类时,它在WebElement行上显示空指针异常。也尝试使用By执行此操作,但按钮无法收到单击。它与WebElements配合得非常好

  • 我正在评估作为网络回归工具的Telerik测试工作室(http://www.telerik.com/automated-testing-tools),并寻找如何设置和使用页面对象模型环境,就像在Selenium中一样。 http://code.google.com/p/selenium/wiki/PageObjects 他们的文档侧重于录制/回放,这非常脆弱,我的谷歌搜索也没有找到相关链接。

  • 我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题

  • 是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢

  • 我正在使用Perl和Selenium构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定Selenium驱动程序将适合页面对象模型的实现。 每个页面对象是否应该“有”一个驱动程序?我的想法是,每个页面对象代表页面向用户提供的一组服务。考虑到这个概念,页面对象与驱动程序没有“has-a”关系。页面对象与驱动程序交互。不过,我仍在寻求建议。我应该将驱动程序作为web应用程序中每个页面对象的一部