如何使用POM在webdriver中的单个测试用例中运行两个不同的页面对象方法

时间:2015-06-09 12:28:15

标签: selenium

我在我的webdriver框架中创建了一个POM模型,其中我有两个页面,一个是登录页面,另一个是用户页面,现在我已经为登录页面写了一个测试用例,它工作正常,问题来自于我我正在尝试运行第二个测试用例,我需要先登录才能访问用户页面,我需要点击查看页面。

下面是我编写的一段代码,用于将两个不同的页面对象模型方法运行到一个测试用例中,目前它只运行登录方法而不是用户页面方法。![在此处输入图像描述] [ 1] 上面我附上了框架截图,下面是我编写的userstestcase代码:

它不允许我粘贴框架截图请帮帮我

package testCases;    
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pageFactory.Userspage;
import pageFactory.loginPage;


    public class UsersTestCase {

        WebDriver driver;
        loginPage lpg;
        Userspage upg;


        @BeforeTest
        public void setup(){

            driver = new FirefoxDriver();    
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            driver.get("someurl");

        }

        @Test(priority=0)

        public void test_login(){

            lpg = new loginPage(driver);
            String loginPageTitle = lpg.getLoginTitle(); 
            Assert.assertTrue(loginPageTitle.contains("Login")); 
            lpg.loginToGuru99("username", "password");
            driver.findElement(By.xpath("//a[@href='somelink']")).click();
        }      

        public void test_users(){
            upg = new Userspage(driver);  
            String usersPageTitle = upg.getLoginTitle(); 
            Assert.assertTrue(usersPageTitle.contains("Users"));   



    }
    }

2 个答案:

答案 0 :(得分:2)

编辑: 快速修复将是:

移动下面的

lpg = new loginPage(driver);
upg = new Userspage(driver); 

到beforeTest步骤,正下方:

driver.get("http://citysurfstaging.sourcefuse.com/admin/login");

并在您的用户测试中,在其他任何事情之前,请拨打以下行:

lpg.loginToGuru99("saurabh.singh@sourcefuse.com", "sourcefuse123");
driver.findElement(By.xpath("//a[@href='http://citysurfstaging.sourcefuse.com/admin/users']")).click();

那应该让你进入你需要执行用户测试的状态......

快速建议,如果你真的想做POM,那么你不应该在测试中映射元素,这应该在你的页面类中完成......

ORIGINAL:

如果您有多个页面,并且需要它们相互交互以执行端到端测试,为什么不为POM创建另一个抽象层并拥有Flow类?

实施例: 在流类的构造函数中,您实例化执行流(登录页面,用户页面)所需的页面,这将使您可以看到每个页面类的页面对象,然后在这些页面之间创建尽可能多的流(方法)。下一步是在测试中实例化流程(与实例化页面的方式相同),并调用与您希望的页面交互的流程方法......如果不够清楚,我可以提供更详细的示例

答案 1 :(得分:0)

上面的问题已经解决了我已经解决的问题是我没有声明全局webdriver命令然后使用此命令我没有将控件转移到用户页面但我已经重新创建了我的框架和一切现在工作正常