新手区 關於 PageObject 設計模式求解

Lee · 2016年03月04日 · 最后由 Lee 回复于 2016年03月05日 · 1534 次阅读

前言

主題可能訂得不好,但我想不到更好的主題名。
我上個月初到今天都在做網頁 APP 的測試,我抱持著不想狂寫代碼的心態,所以挑戰整體系統化。做法則是參考博客,一開始是用抄的,所以一知半解得很嚴重。不廢話,進主題。


正文

運用測試框架:selenium
使用代碼:Java
測試對象圖片:

每一張圖片都是一本書。

PageObject 的其中一個類

@FindBy(how = How.XPATH, using = "//*[@id=\"bookId-xxxxx\"]"
private WebElement xxxxxBook;

public void openBook() {
  xxxxxBook.click()
}

用例

public void test001() {
  Bookshelf bs = PageFactory.initElements(driver, Bookshelf.class);
  bs.openBook();
}

代碼的部分,我只能寫到這裡。


問題

我只知道這樣的基本用法,而我有好幾次寫錯上面的定位位置,但是在寫工廠生成的時候,他並不會報錯,直到我開始去使用那個物件的時候,他才回報錯誤,然後我的疑問也是這樣產生。第一次接觸的時候,我一直以為在工廠生成的時候,他就會去找那個物件,然後等待我呼叫。至於錯誤則是 selenium 在背後默默解決,沒引發程序崩潰的話,不會拋出錯誤。但事實上我去看過這部分源碼,看不太懂是第一點,第二點是我並沒有找到明確拋出錯誤的地方。

我想問的是到底物件定位是甚麼時候開始,工廠生成的時候?物件被使用的時候?

如果有人能告訴我答案,或者提示我能去看甚麼,或者該怎麼看,我會非常感謝。

共收到 3 条回复 时间 点赞

怎么搞的繁体字?

可以参考这个:https://testerhome.com/topics/3483
PageFactory 的 initElements 是生成的是 WebElement Proxy 的实例,这个你可以调试的时候看看,只有在真正去进行元素操作的时候,locationElementHandler 里面的 invoke 方法会先调用 findElement() 方法后,再执行你的如 click. 也就是 PageFactory 生成的元素实际是通过 locationElementHandler 里面的 invoke 方法去调用的,这也是 proxy 的原理.

Lee #3 · 2016年03月05日 Author

@simonpatrick
了解,原來是我看的不充分。謝謝

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册