Tag: pageobjects

我可以使用数组或哈希映射在页面对象模型中组织对象吗?

我是Selenium自动化的新手。 我对java有很好的了解。 我创建了用于用户注册的测试脚本。 我已经使用了页面对象模型。 这是我的页面对象脚本。 这是我用的 public class SIgnUpTest extends PageObject { @FindBy(id=”merchantName”) private WebElement merchant; @FindBy(id=”merchantCode”) private WebElement code; @FindBy(id=”categoryId”) private WebElement category; @FindBy(id=”description”) private WebElement description; @FindBy(id=”merchantLogo”) private WebElement logo; @FindBy(id=”btnNextStep1″) private WebElement Next; public SIgnUpTest(WebDriver driver) { super(driver); } public void enterName(String name, String code,String description){ this.merchant.sendKeys(name); this.code.sendKeys(code); this.description.sendKeys(description); } public void […]

为页面中的帧实现PageObjects模式

如何为页面中的帧实现pageObject模式(Selenium)..我有一个主页,有一个左框架和右框架,我想为每个框架创建页面对象.. 例如,我有如下的LeftFrame页面对象: Public Class HomePageLeftFrame{ private WebElement link; private WebElement textField; } 如何为HomePageLeftFrame对象中的两个元素编写@FindBy注释…有没有办法? 注意:根据关于pageObjects的selenium的文档,提到页面对象可以是整个HTML页面或页面的一部分。我的理解是否正确上述实现?

为什么这段代码会从我项目中随机的其他代码中抛出输出? 我怎样才能解决这个问题?

我是Java的新手,我可能搞砸了代码中的一些东西。 但这里有什么问题? 我正在尝试为主页中的元素创建对象,我必须测试。 package pageObjects; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class HomePage { private static WebElement element; public static void main(String args[], WebDriver driver){ HomePage hp = new HomePage(); hp.SignInButton(driver); hp.ImageButton(driver); System.out.println(“Yup”); } public WebElement SignInButton(WebDriver driver){ element = driver.findElement(By.linkText(“Sign In”)); System.out.println(“Yeua”); return element; } public WebElement ImageButton(WebDriver driver){ return element = driver.findElement(By.linkText(“Images”)); […]

我为什么要使我的页面对象实例化而不是静态?

我是一名相对较新的QA工程师,致力于学习Selenium(Java),我想使用页面对象来模拟我的页面。 目前,我正在这样做,我的页面对象类是静态变量(用于定位页面元素的对象)和静态方法(用于获取By对象和执行页面函数)的集合。 这对我来说似乎是最简单的方法,因为我的方法不需要依赖任何实例变量,只需要依赖定位器。 我只是在我的测试代码中调用这些方法。 但是,我读到的关于页面对象的所有内容都涉及实例化它们并让方法返回页面对象。 这似乎使一切变得更加复杂。 例如,我没有一个登录方法,而是需要两个,一个用于登录成功,一个用于登录失败。 我知道它似乎是公认的最佳实践,但我想了解原因。 谢谢。 这是我的pageObject代码,我的测试调用方法为LoginPage.login(username, password); package pageObjects; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class LogInPage { private static By emailTxtB = By.id(“user_email”); private static By passwordTxtB = By.id(“user_password”); private static By logInButton = By.xpath(“/html/body/div/div[2]/form/div[2]/div[2]/div/button”); private static By signUpButton = By.xpath(“/html/body/div/div[2]/form/div[2]/div[2]/div/a”); private static By valErrorMessage = By.id(“flash_alert”); public static void logIn(WebDriver […]

Selenium Webdriver:使用相对于其他元素的路径进行页面工厂初始化?

我正在尝试使用页面工厂@FindBy注释在Selenium Webdriver中编写页面对象。 页面对象用于侧边栏,包含页面对象需要与之交互的所有元素的父WebElement以这种方式初始化: @FindBy (xpath = “//div[contains(@class,’yui3-accordion-panel-content’) and child::div[.=’Sidebar’]]”) WebElement sidebar; 然后我想要相对于这个sidebar元素的搜索输入。 有没有办法做这个引用sidebar元素? 我可以将整个路径复制并粘贴到开头: @FindBy (xpath = “//div[contains(@class,’yui3-accordion-panel-content’) and child::div[.=’Sidebar’]]//input[@id=’search’]”) 但我宁愿相对于第一个元素。 这样的事情可能吗? @FindBy (parent = “sidebar”, xpath = “.//input[@id=’search’]”) 关于@FindBy注释的Selenium文档有点缺乏……

获取已找到的WebElement的By定位器

是否有一种优雅的方式来获取Selenium WebElement的By定位器,我已经找到/识别出来了? 要清楚这个问题:我想要用“定位器”来查找元素。 在这种情况下,我对特定属性或特定定位器(如css-locator) 不感兴趣。 我知道我可以解析WebElement的toString()方法的结果: WebElement element = driver.findElement(By.id(“myPreciousElement”)); System.out.println(element.toString()); 输出将是例如: [[FirefoxDriver:WINDOWS上的firefox(….)] – > id:myPreciousElement] 如果你通过xpath找到你的元素: WebElement element = driver.findElement(By.xpath(“//div[@someId = ‘someValue’]”)); System.out.println(element.toString()); 然后你的输出将是: [[FirefoxDriver:WINDOWS(….)上的firefox] – > xpath:// div [@someId =’someValue’]] 所以我目前编写了自己的方法来解析这个输出并给我“重新创建”By定位器。 但是在Selenium中是否已经实现了一种更优雅的方式来获取用于查找元素的By定位器? 到目前为止我找不到一个。 如果您确定没有开箱即用,您能想到API创建者可能无法提供此function的任何原因吗? *尽管这与这个问题无关,如果有人想知道为什么你需要这个function,只需要两个例子: 如果你使用PageFactory,你很可能不会在Page类中将定位器作为成员变量,但是在使用页面元素时可能会需要它们。 你正在使用那些只使用没有PageFactory的页面对象模式的人的API,因此希望你交出定位器而不是元素本身。*

Selenium PageFactory设计:在页面对象模型之后我在哪里编写断言

我正在关注Page Object Model以在一个应用程序中自动化流程。 在其中一个模块中,我必须断言页面标题和更多消息。 截至目前,我将我的Assertion代码放在​​PageFactory本身中,如下所示: public class EditPost { WebDriver driver; public EditPost(WebDriver editPostDriver) { this.driver=editPostDriver; } @FindBy(how=How.XPATH,using=”//*[@id=’message’]/p”) WebElement post_published; public void assert_message() { String actual_message_title=post_published.getText(); Assert.assertEquals(actual_message_title, “Post published. View post”); System.out.println(“Message: Post published, Successfully Verified”); } } 我从实现TestNG的主文件调用assert方法如下: @Test (priority=5) public void assert_message() { //Created Page Object using Page Factory EditPost edit_post = PageFactory.initElements(driver, […]

使用Java在Selenium WebDriver中使用PageObjects,Page Factory和WebDriverWait

我一直在使用Selenium WebDriver为我曾经使用过的一些项目实现function测试。 我正在尝试使用Page Factory设计模式与Page Factory来分解我的定位器。 我还创建了一个静态WaitTool对象(singleton),它使用可选的超时参数实现了几种等待技术。 我目前的问题是我想在PageFactory尝试初始化WebElements之前使用我的wait方法。 我想等待的原因是因为PageFactory可能会尝试在页面元素可用之前初始化页面元素。 这是一个示例PageObject: public class SignInPage extends PageBase { @FindBy(id = “username”) @CacheLookup private WebElement usernameField; @FindBy(id = “password”) @CacheLookup private WebElement passwordField; @FindBy(name = “submit”) @CacheLookup private WebElement signInButton; public SignInPage(WebDriver driver) { super(driver); WaitTool.waitForPageToLoad(driver, this); // I’d like initialisation to occur here } public MainPage signInWithValidCredentials(String username, […]

如何实现可以返回不同PageObjects的WebDriver PageObject方法

我刚刚开始使用WebDriver ,我正在尝试学习最佳实践,特别是使用PageObjects和PageFactory 。 我的理解是,PageObjects应该在网页上公开各种操作,并将WebDriver代码与测试类隔离开来。 通常,相同的操作可能导致根据所使用的数据导航到不同的页面。 例如,在此假设的登录方案中,提供管理员凭据会将您带到AdminWelcome页面,并且提供客户凭据会将您带到CustomerWelcome页面。 所以实现这个的最简单方法是公开两个返回不同PageObjects的方法…… 登录PageObject package example; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class Login { @FindBy(id = “username”) private WebElement username; @FindBy(id = “password”) private WebElement password; @FindBy(id = “submitButton”) private WebElement submitButton; private WebDriver driver; public Login(WebDriver driver){ this.driver = driver; } public AdminWelcome loginAsAdmin(String user, String […]

等待元素 – WebDriver – PageObject模式

只要我使用PageObject模式,我就想知道在动态页面上应该在哪里等待元素。 假设我们有测试方法和pageObject类。 我应该做什么(在测试方法中): 点击按钮 等待元素显示 validation元素(包含例如方法isElementDisplayed()) 或者也许有其他好的做法等待元素? 也许我们应该等待在PageObject.class中的方法isElementDisplayed中的元素?