希望我不是第一个遇到这个问题的人。
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定位器的显式等待。
我一直使用页面对象,但我在类的顶部有定位器,而不是元素。然后我使用定位器按需要点击按钮等。这样做的好处是我只在需要的时候访问页面上的元素,这样就避免了过时的元素异常等。请参阅下面的一个简单示例。
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应用程序中每个页面对象的一部