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



我在我的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"));   

    }
    }

编辑:一个快速的修复方法是:

移动下面的

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,那么你不应该在你的测试中映射元素,这应该在你的页面类中完成…

原始:

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

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

上面的问题已经解决了,我做了什么来解决这个问题,我没有声明全局webdriver命令,然后使用这个命令,我没有将控制转移到用户页面,但我已经重新创建了我的框架,现在一切都很好

最新更新