我有两个带有选择器和方法的类(在这两个类中我都声明了webdriver)。我还使用@findby来选择定位器。
带有选择器和方法的登录页面
package objectsAndMethods;
public class LoginPage{
public WebDriver driver;
HomePage homePage = new HomePage();
public void PageFactory(WebDriver driver){
this.driver = driver;
}
//Login Page
@FindBy(id = "id") private WebElement userName;
@FindBy(id = "id1") private WebElement password;
@FindBy(id = "id2") private WebElement loginButton;
Parameters Parameters = new Parameters();
public void navigateToPage() {
driver.navigate().to(Parameters.getBaseUrl());
driver.manage().window().maximize();
}
public void fillUsername(){
userName.clear();
userName.sendKeys(Parameters.getUsername());
}
public void fillPassword(){
password.clear();
password.sendKeys(Parameters.getPassword());
}
public void clickLoginButton(){
loginButton.click();
}
public void checkUserLogged(){
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("id")));
}
}
public class HomePage {
@FindBy(id = "id") private WebElement logoutButton;
@FindBy(id = "optionId") private WebElement selectOption;
@FindBy(xpath="/xpath") private WebElement submitButton;
public WebDriver driver;
public void selectOption(){
Select droplist = new Select(selectOption);
droplist.selectByVisibleText(Parameters.getOption());
}
public void clickSubmitButton(){
submitButton.click();
}
}
package baseClasses;
public class BaseClassTest{
// TODO Auto-generated method stub
@Before
public void setUp() {
loginPage.driver = new FirefoxDriver();
}
LoginPage loginPage = new LoginPage();
@Test
public void loginTestCase() throws IOException, InterruptedException {
loginPage.navigateToPage();
System.out.println("You are on " + baseClasses.Parameters.getBaseUrl());
Thread.sleep(2000);
LoginPage loginPageFindBy = PageFactory.initElements(loginPage.driver, LoginPage.class);
loginPageFindBy.fillUsername();
Thread.sleep(2000);
loginPageFindBy.fillPassword();
Thread.sleep(2000);
loginPageFindBy.clickLoginButton();
Thread.sleep(2000);
loginPage.checkUserLogged();
System.out.println("User is logged");
}
@After
public void tearDown() {
loginPage.driver.quit();
}
public class HomePageTest extends BaseClassTest{
//setUp();
HomePage homePage = new HomePage();
@Test
public void homeTestCase() throws IOException, InterruptedException {
super.setUp();
super.loginTestCase();
HomePage homePageFindBy = PageFactory.initElements(homePage.driver, HomePage.class);
homePageFindBy.selectOption();
Thread.sleep(2000);
homePageFindBy.clickSubmitButton();
Thread.sleep(2000);
}
}
主页测试从两个类(登录页面和主页)调用方法--它们都声明了驱动程序。问题是,当运行测试时,打开了2个firefox实例,并且只有登录测试成功执行,其他来自主页的方法都失败了。有人能帮我明白我做错了什么吗?
运行HomePagetest
时,BaseClastest
中@before
注释下的setup()
方法将在HomeStCase()
之前调用,因为HomePagetest
扩展了BaseClastest
。
行loginpage.driver=new FirefoxDriver();
打开第一个浏览器。调用super.setup()时;
setup()
将再次执行,并打开第二个浏览器。
只需从HometestCase()
中删除super.setup();
。
我有一个类(称为name),它有如下不同的方法: alex(), john(), claire(), charles(), luke(), richard(), jen()等等 我需要逐一调用所有这些方法,例如: ... 等等 我尝试的是创建一个名称列表,并调用循环中的所有方法 但这种调用方法的方式正在失败。有没有办法在循环中调用同一类的多个方法?
问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法
我有一个主要的“抽象”类宠物,和两个“真实”类狗和猫。当我有两个宠物的例子时,我想知道它们是否是“同一种宠物”,而不考虑它们是哪种宠物。 我试过这个 我尝试了所有评论的返回,它总是给出这样的结果: 有没有办法在主类中进行这样的测试以避免代码重复? 编辑: 多人提到它忘记了子类化部分 这可以按预期工作
我有一个java类,它打开两个Chrome浏览器,分别搜索“测试1”和“测试2”。然而,一旦两个浏览器都打开,只有一个带有谷歌页面的浏览器会搜索“测试1测试2”。 我相信这个问题可能是因为我从父类调用驱动程序 = 新的 WebDriver。但是,我不确定如何解决此问题。 下面是我尝试并行运行的两个方法。 这是我用来调用它们的xml文件。 包含驱动程序的父方法 当前结果:打开两个浏览器,每个浏览器都
如何使用Selenium WebDriver在不同的浏览器上同时运行多个测试? 我是用java工作的,我甚至试着下载了selenium网格:selenium-server-standalone-2.33.0.jar文件 即使在程序之后, java-jar selenium-server-standalone-2.33.0.jar-role hub-port 4444 java-jar seleni
问题内容: 我正在将Selenium WebDriver与Java和TestNG框架一起使用。我想一次在一个代码中使用Firefox,IE,Chrome来进行跨浏览器测试。我只能将Firefox初始化为 但无法以相同方式初始化其他浏览器。例如: 给出错误 给出错误 如何初始化IE和Chrome并在所有所需的浏览器中执行测试? 问题答案: 对于C# 加 创建一个包含浏览器名称的配置文件。实现与配置文