这是我到目前为止所拥有的:
一个基于Webdriver的Java类,它可以登录到应用程序并进入主页:
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class MLoginFFTest {
private WebDriver driver;
private String baseUrl;
private String fileName = "screenshot.png";
@BeforeMethod
public void setUp() throws Exception {
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setAssumeUntrustedCertificateIssuer(false);
driver = new FirefoxDriver(profile);
baseUrl = "https://a.b.c.d/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testAccountLogin() throws Exception {
driver.get(baseUrl + "web/certLogon.jsp");
driver.findElement(By.name("logonName")).clear();
AssertJUnit.assertEquals(driver.findElement(By.name("logonName"))
.getTagName(), "input");
AssertJUnit.assertEquals(driver.getTitle(), "DA Logon");
driver.findElement(By.name("logonName")).sendKeys("username");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("password");
driver.findElement(By.name("submit")).click();
driver.findElement(By.linkText("Account")).click();
AssertJUnit.assertEquals(driver.getTitle(), "View Account");
}
@AfterMethod
public void tearDown() throws Exception {
File screenshot = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(screenshot, new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
driver.quit();
}
}
现在我们看到有两页:1。登录页面,其中我必须输入用户名和密码,以及主页,一旦身份验证成功,我将被带到这里。
现在我想使用Pagefactory将其实现为PageObjects:
package com.example.pageobjects;
import static com.example.setup.SeleniumDriver.getDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
public abstract class MPage<T> {
private static final String BASE_URL = "https://a.b.c.d/";
private static final int LOAD_TIMEOUT = 30;
private static final int REFRESH_RATE = 2;
public T openPage(Class<T> clazz) {
T page = PageFactory.initElements(getDriver(), clazz);
getDriver().get(BASE_URL + getPageUrl());
ExpectedCondition pageLoadCondition = ((MPage) page).getPageLoadCondition();
waitForPageToLoad(pageLoadCondition);
return page;
}
private void waitForPageToLoad(ExpectedCondition pageLoadCondition) {
Wait wait = new FluentWait(getDriver())
.withTimeout(LOAD_TIMEOUT, TimeUnit.SECONDS)
.pollingEvery(REFRESH_RATE, TimeUnit.SECONDS);
wait.until(pageLoadCondition);
}
/**
* Provides condition when page can be considered as fully loaded.
*
* @return
*/
protected abstract ExpectedCondition getPageLoadCondition();
/**
* Provides page relative URL/
*
* @return
*/
public abstract String getPageUrl();
}
对于登录页面,我不确定如何实现它,以及调用这些页面的测试。
我希望这些链接将对您有所帮助:
webdriver中的页面对象
使用jBehave的页面对象
我建议让一个类负责before/after方法,并且应该在整个场景之前和之后调用它们。现在你会在登录到你的页面后关闭webdriver,我想这不是你想要的行为。您可以为登录页面和主页中发生所有单击的页面(现在您的mloginftest类正在登录)提取一个抽象级别。现在,另一个类只需运行页面中的方法,如下所示:
@Test
public void shouldOpenMainPage(){
LoginPage loginPage = new LoginPage();
MainPage mainPage = loginPage.loginCorrectly();
mainPage.verifyOnMainPage();
mainPage.doSthElse();
verifySth(....);
}
所以现在你的文件结构可能是
++pages/LoginPage.class
++pages/MainPage.class
++steps/SomeTest.class
希望这能有所帮助。
以下是我得到的例外情况: 失败:goToPortal java.lang.nullPointerException(位于org.openqa.selenium.support.pageFactor.defaultelementLocator.findElement(defaultelementLocator.java:69)(位于org.openqa.selenium.support.pageFa
我使用下面的mongo查询来获取最高温度。有人能帮助我们如何使用mongo java驱动程序,使用和在java中实现吗?
我是SeleniumWebDriver的新手。我写这段代码是为了理解导航命令,但是一旦浏览器打开,就会显示一个登录弹出窗口。我试图使用类名或xpath关闭它,但出现超时异常。 在这种情况下,我需要使用显式等待吗?你能帮我找出问题所在吗? } 例外情况: [43.366][SEVERE]:超时接收来自渲染器的消息: 37.150[43.373][SEVERE]:超时接收来自渲染器的消息:-0.007
我正在尝试用Java向下滚动APK页面。我正在使用Appium和Selenium。 我试过: 和
操作:如果我点击任何一个链接,当页面加载完成时,进度条就会显示出来,然后这个进度条就会被隐藏 疑惑:我们想要自动化以上动作,我如何检查进度动作是否完成 下面是html代码 单击链接后,html看起来如下所示 则页面加载完成的html如下所示 那么如何检查进度条是否完成呢?目前我使用的是thread.sleep(),但有时web驱动程序会引发异常 请提供一个如何处理显式wait的建议