我在我的 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/