我无法将驱动程序/对象传递到下一个类/页,并且在第一个/开始类中具有相同的NullPointerException。
PageObject类-SearchResultsPage:
public class SearchResultsPage extends BasePage{
@FindBy(xpath = "//*[@data-original-title=\"Compare this Product\"]")
List <WebElement> compareButton;
@FindBy(partialLinkText = "Product Compare")
WebElement urlComparePage;
public SearchResultsPage(WebDriver driver) {
super(driver);
PageFactory.initElements(driver, this);
}
public void compareItems(){
for(WebElement compareButtons: compareButton){
compareButtons.click();
}
}
public void goToComparePage(){
urlComparePage.click();
}
}
PageObject类主页:
public class HomePage extends BasePage{
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(driver, this);
}
public String PAGE_TITLE = "Your Store";
WebDriver driver;
@FindBy(className = "input-lg")
WebElement inputSearch;
@FindBy(className = "btn-lg")
WebElement searchButton;
public void isHomePage(){
String pageTitle = driver.getTitle();
Assert.assertEquals(pageTitle, PAGE_TITLE);
}
public void inputIntoSearch(){
String itemName = "ipod";
inputSearch.sendKeys(itemName);
}
public SearchResultsPage clickSearchButton(){
searchButton.click();
return PageFactory.initElements(driver, SearchResultsPage.class);
}
}
测试等级:
public class MainPage {
HomePage hp;
TopNavigation topNav;
ComparePage cp;
SearchResultsPage srp;
@BeforeTest
public void setUp(){
WebDriver driver = new FirefoxDriver();
driver.get("http://demo.opencart.com/");
driver.manage().window().maximize();
hp = PageFactory.initElements(driver, HomePage.class);
topNav = PageFactory.initElements(driver, TopNavigation.class);
cp = PageFactory.initElements(driver, ComparePage.class);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@Test(priority = 0)
public void checkIsHomePage(){
hp.isHomePage();
}
@Test
public void changeCurrency(){
topNav.clickButtonChangeCurrency();
topNav.setCurrency();
}
@Test
public void searchProducts(){
hp.inputIntoSearch();
hp.clickSearchButton();
}
@Test
public void addToCompare(){
srp.compareItems();
}
}
我有两个问题:
1.当我运行测试检查IsHomePage()-FAILS(NullPointerExcema)和ChangeMoney cy()PASS。我不知道为什么第一次测试是失败的,如果这两个方法在同一个PageObiect类-主页。什么是错的?
2.当searchProduct方法通过时,我想使用addToCompare()比较产品,但我不知道如何使用PageFactory。initelements使用搜索结果在页面上进行测试。我该怎么做?
---------------------------------------更新------------------好的,我找到了它不起作用的原因。它是因为基类(BasePage)。我做到了,并用PageObjest、构造函数和超级(驱动程序)扩展了所有类。当我删除PageObject类中的“extends”和“super”并使用(this.driver=driver)时,它现在可以工作了。但是我用这个基类做了什么,它不起作用??
---------------------------------------------更新-----------------我的基本页面现在很差:
public class BasePage {
WebDriver driver;
public BasePage(WebDriver driver){
this.driver=driver;
}
}
基本的问题是,HomePage
显然是为了服从于BasePage
(尽管您也在代码片段中称之为Main Page
):它的构造函数将WebDriver
实例传递给Super(),然而它有自己的WebDriver驱动程序
成员变量,该变量永远不会设置,当调用isHomePage()
时,该变量将为空。相反,您应该使用父类中的WebDriver
实例,并从子类中删除掩蔽声明。
我在类Sample中初始化了一个驱动程序对象,我也想将该驱动程序对象传递给其他类,但我得到了一个空指针异常。我的代码是 示例类 桑普莱克拉松 Testng xml文件
我正在使用PageObjects在Selenium Webdriver中制作一个测试套件,但我怀疑,即使驱动程序指向不同的框架,WebElement引用的实例是否可以工作?我为之编写测试的网站有很多框架(不,我不能停止使用框架:-),每个网站上的一个框架元素是一个顶栏。我想为这个框架创建一个页面对象,我可以从包含它的其他页面对象中初始化和使用它。 但我怀疑阉羊你可以使用WebElements当驱动
我已经使用页面对象模型创建了一个Java /Appium/Cucumber项目。 我有一个基本能力类,它为我创建了一个驱动程序: 我有一些页面对象类: 如果我使用Junit创建一个简单的单元测试,测试运行良好: 公共类测试步骤{ } 然而,我完全不知道如何在cucumber的“步骤”胶水代码中实现这些。例如,如果我有一个给定的/当/然后,我不能初始化我的页面对象,因为我需要通过我的驱动程序,但是当
我有一张桌子 当我删除的时候,我一直得到 注意:我连接到一个特定的数据库驱动程序,其表名为 我不知道为什么我不能删除这个: 我做错什么了吗? 如果我把$baby挖出来,我好像就会得到它
Navicat 还能让你管理其他 SQLite 对象:索引和触发器。在主窗口的主工具栏点击相应的按钮来打开对象列表。
Navicat 还能让你管理其他 SQL Server 对象:索引、同义词、触发器、备份设备、链接服务器、服务器触发器、程序集、数据库触发器、分区函数和分区方案。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。