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

标签 selenium

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

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

它不允许我粘贴框架屏幕截图,请帮助我

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("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ccbfadb9beadaea4e2bfa5a2aba48cbfa3b9beafa9aab9bfa9e2afa3a1" rel="noreferrer noopener nofollow">[email protected]</a>", "sourcefuse123");
driver.findElement(By.xpath("//a[@href='http://citysurfstaging.sourcefuse.com/admin/users']")).click();

这应该让您处于执行用户测试所需的状态...

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

原文:

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

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

关于selenium - 如何使用 POM 在 webdriver 的单个测试用例中运行两个不同的页面对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732065/

相关文章:

selenium - Selenium WebDriver 可以在后台静默打开浏览器窗口吗?

selenium - Webdriver 在 IE11 和 Windows 10 中打字非常慢

java - 如何使用 WebDriver 验证下拉菜单的启用禁用值?

python - Heroku Only Dev Environment 有 Chrome 版本 81 问题

python-3.x - ImportError : sys. meta_path 为 None,Python 可能正在关闭

angular - 如何不忘记再次打开 Protractor 到 Angular 同步?

python - 如何使用selenium填写表单后执行javascript?

python - 无法使用selenium同时从两个不同深度收集信息

selenium - 如何实现 HP 质量中心自动化?

ruby-on-rails - 使用带 Selenium 的 Capybara,我将如何单击表格行?