SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
#JCConf
淺談 Geb 網站⾃自動化測試
林彥宏 lyhcode@gmail.com
#JCConf
• 遊牧⼯工程師 / Nomadic Developer
• 遠距⼯工作者 / Remote Worker
• 喜歡分享程式設計的樂趣
• Founder of 思創軟體,校園協同教學業師
• Co-founder of PLWeb,開發程式語⾔言學習網
• Groovy user since 2008
Who Am I
林彥宏
lyhcode.info
#JCConf
Geb (pronounced“jeb”)
very groovy browser automation… web testing, screen scraping and more
JCConfTW
2014
Geb (pronounced“jeb”)
very groovy browser automation… web testing, screen scraping and more
瀏覽器⾃自動化
Browser Automation
Groovy Browser Automation
What is Geb?
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb 可以做什麼︖?
• Web Application Testing
• Functional Testing
• User Acceptance Testing
• Web Automation Script
• Web Crawler
• Webpage Screenshot
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb 的優點
• Based on the WebDriver
• jQuery-like selector and syntax
• 易學易讀易寫的 Groovy DSL
• 實現 Page Object Pattern
• ⾼高度整合測試框架,如 JUnit, Spock, TestNG…
• 開發流程整合,搭配 Grails, Gradle, Maven,
Jenkins CI…
WebDriver
#JCConf
Geb (pronounced“jeb”)
very groovy browser automation… web testing, screen scraping and more
JCConfTW
2014
Java SE
Groovy WebDriver
Geb
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
SeleniumHQ
• Selenium IDE
• Selenium Remote Control
• Selenium WebDriver
• Selenium Grid
Browser Automation Suite
Geb 的核⼼心驅動
Selenium Sponsors:
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Selenium Core
• Created by Jason Huggins in 2004 at ThoughtWorks.
• 源起⾃自⼀一個測試⼯工具 “JavaScriptTestRunner”
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Selenium IDE
• Firefox extension
• Easy record and playback
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
WebDriver
• Selenium 1.0 + WebDriver = Selenium 2.0
• WebDriver API 規範已提交 W3C 標準
• http://www.w3.org/TR/webdriver/
• Selenium WebDriver
• ⽀支援多種程式語⾔言:
• Java, C#, Ruby, Python, Perl
• ⽀支援多種瀏覽器:
• Google Chrome、Firefox 與 Internet Explorer 等
• HtmlUnit (headless browser)
W3C Working Draft Editors
1. Simon Stewart, Facebook
2. David Burns, Mozilla
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Selenium Remote Control
• Selenium RC
• Client / Server 架構
• Great for testing
under a Continuous
Integration system
(e.g. Jenkins CI)
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
殘念
⾃自動化測試的難題
987. WebDriver driver = new FirefoxDriver();
988. driver.get("http://www.google.com");
989. WebElement element = driver.findElement(By.name("q"));
990. element.sendKeys("geb");
991. element.submit();
992. System.out.println("Title: " + driver.getTitle());
993. driver.quit();
為什麼我們還需要 Geb︖?
#JCConf
Geb (pronounced“jeb”)
very groovy browser automation… web testing, screen scraping and more
JCConfTW
2014
Java SE
Groovy WebDriver
Geb
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Why Groovy
• Groovy makes Java better, more powerful and easier
to use.
• Groovy 易學易寫,從 Java 到 Groovy ⾨門檻極低
• 程式碼更精簡,⽀支援以 Scripting ⽅方式執⾏行
• Groovy 發揮 DSL 優勢

DSL, Domain-Specific Language 領域描述語⾔言
• 共享 Java 豐富資源
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Groovy DSL
1. task hello {
2. doLast {
3. println "Hello"
4. }
5. }
6.
Example: Define a Gradle Task
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Why Are DSLs Important?
• To improve programmer’s
productivity.
• Smaller and easier to understand,
allow nonprogrammer to see the
code that drives important parts
of their business.
— Martin Fowler
ThoughtWorks
#JCConf
Geb (pronounced“jeb”)
very groovy browser automation… web testing, screen scraping and more
JCConfTW
2014
Java SE
Groovy WebDriver
Geb
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb Awesome
• jQuery-like
• CSS based content lookup (Navigator API)
$('input[name=username]').value()
• Method Chaining
$('h3').children().attr('href')
• DSL featured
Browser.drive {

go 'http://google.com'

}
This is Geb code, not jQuery :)
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
開始使⽤用 Geb
1. 安裝 JDK
2. 安裝 Groovy
3. 使⽤用 Groovy Shell 或 Groovy Console
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
安裝 Groovy
• 建議使⽤用 GVM ⼯工具(for Mac OS X, Linux)
• gvmtool.net
• Install Groovy with GVM tool
gvm install groovy
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
安裝 Geb︖?
• Geb 是⼀一個 Java/Groovy Library,

not standalone software
• 主要套件名稱是 geb-core
• 可以從 Maven Repository 取得所需 JAR 檔案
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb with Groovy Shell
$ groovysh
REPL (Read–Eval–Print Loop) 適⽤用於 Geb step-by-step 的執⾏行⽅方式
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Dependencies of Geb
<dependency>
<groupId>org.gebish</groupId>
<artifactId> geb-core </artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId> selenium-firefox-driver </artifactId>
<version>2.44.0</version>
</dependency>
Geb 需要 2 個套件(artifact)
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
搜尋 Maven Repository
mvnrepository.com
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Using Grapes
1. groovy.grape.Grape.grab(group: 'org.gebish', module:
'geb-core', version: '0.10.0')
2. groovy.grape.Grape.grab(group: 'org.seleniumhq.selenium',
module: 'selenium-firefox-driver', version: '2.44.0')
Grape lets you quickly add maven repository
dependencies to your classpath.
Attention: Not ‘org.codehaus.geb’
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Browse Google Web Site
3. b = new geb.Browser()
4. b.go 'http://google.com'
5. b.title
建⽴立 Browser 物件
命令瀏覽器開啟 URL 位址顯⽰示網⾴頁
取得網⾴頁標題“Google”
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
檢測元素
利⽤用「檢測器」觀察即時的 DOM
內容︔;⽽而非 HTML 原始碼
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
DOM 選擇器(Selector)
A. $('form.tsf')
B. $('form#tsf')
C. $('form[name=f]')
<form class="tsf" action="/search"
id="tsf" method="GET"
name="f" role="search">
選哪⼀一個好呢︖?
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb Navigator API
$('form.tsf').attr('action')
$('form[name=f]').attr('action')
$('form', name: 'f').attr('action')
$('form', id: 'tsf').attr('action')
<form class="tsf" action="/search"
id="tsf" method="GET"
name="f" role="search">
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
表單存取
6. form = b.$('form#tsf')
7. form.q = 'jcconf 2014'
利⽤用選擇器找到⽬目標表單元素
修改表單欄位資料︔;⽴立刻
在瀏覽器畫⾯面產⽣生改變
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
表單送出
8. form.btnk().click()
<input value="Google 搜尋”
name="btnK" type="submit">
點擊「Google 搜尋」按鈕
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
瀏覽器即時互動
groovy:000> b.title
===> jcconf 2014 - Google 搜尋
groovy:000> b.currentUrl
===> https://www.google.com.tw/?gfe_rd=cr&ei=JHtkVN6IIZCZlAWzv4CgBg&gws_rd=ssl#q=jcconf+2014
瀏覽器畫⾯面更新後,Geb 程式
可以獲取新的資料
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
存取網⾴頁內容
9. b.$('h3').collect { it.text() }
10. b.$('h3 a').collect { it.attr('href') }
搜尋結果的所有標題⽂文字
搜尋結果中所有的網⾴頁連結
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
點擊連結 Click
11. b.$('h3 a').first().click()
點進去搜尋排名在第⼀一筆的網站連結
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Scripting with Groovy
1. @Grab('org.gebish:geb-core:0.10.0')
2. @Grab('org.seleniumhq.selenium:selenium-firefox-driver:2.44.0')
3.
4. b = new geb.Browser()
5. b.go 'http://google.com'
6.
7. form = b.$('form#tsf')
8. form.q = 'jcconf 2014'
9. form.btnK().click()
10.
11. b.quit()
GoogleSearch.groovy
$ groovy GoogleSearch.groovy
使⽤用 @Grab 引入需要的套件
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Re-write in DSL Style
1. @Grab('org.gebish:geb-core:0.10.0')
2. @Grab('org.seleniumhq.selenium:selenium-firefox-driver:2.44.0')
3.
4. Browser.drive {
5. go 'http://google.com'
6.
7. $('form#tsf').with {
8. q = 'jcconf 2014'
9. btnK().click()
10. }
11. }.quit()
DSL 語法使⽤用 Groovy Closure 實現
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
waitFor
1. Browser.drive {
2. go 'http://google.com'
3.
4. $('form#tsf').with {
5. q = 'jcconf 2014'
6. btnK().click()
7. }
8.
9. waitFor {
10. title.contains('jcconf 2014')
11. }
12.
13. $('h3').each {
14. println it.text()
15. }
16. }.quit()
⼀一直等…⋯⼀一直等…⋯⼀一直等…⋯
直到標題變成 “jcconf 2014”
或是 Timeout (逾時)
預設的 Wait Timeout 預設值為 5 秒
#JCConf
1. #!/usr/bin/env groovy
2. @Grab('org.gebish:geb-core:0.10.0')
3. @Grab('org.seleniumhq.selenium:selenium-firefox-driver:2.44.0')
4. import geb.Browser
5.
6. def keywords = args.join(' ')
7.
8. Browser.drive {
9. go 'http://google.com'
10.
11. $('form#tsf').with {
12. q = keywords
13. btnK().click()
14. }
15. waitFor {
16. $('h3').size() > 0
17. }
18. $('h3').each {
19. println "* ${it.text()}"
20. }
21. }.quit()
GoogleSearch
command-line tool
$ ./GoogleSearch jcconf 2014 | sort | less
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Reporting
• 產⽣生測試報告
• 原始碼(.html)
• 網⾴頁快照(*.png)
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Reporting
1. Browser.drive {
2. config.reportsDir = new File('.')
3.
4. go 'index.html'
5. report 'home page'
6.
7. go 'login.html'
8. report 'login page'
9.
10. $('#form').with {
11. username = '...'
12. password = '...'
13. btnLogin().click()
14. }
15.
16. waitFor { title.contains('Dashboard') }
17. report 'dashboard page'
18. }
設定報表路徑
report 1
report 2
report 3
#JCConf
ScreenShot
command-line tool
$ ./ScreenShot http://jcconf.tw
#JCConf
1. #!/usr/bin/env groovy
2. @Grab('org.gebish:geb-core:0.10.0')
3. @Grab('org.seleniumhq.selenium:selenium-firefox-driver:2.44.0')
4. import geb.Browser
5. Browser.drive {
6. config.reportsDir = new File('.')
7. go args[0]
8. report "screenshot"
9. }.quit()
ScreenShot
$ ./ScreenShot http://jcconf.tw
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Cross-browser Testing
• selenium-chrome-driver
• selenium-firefox-driver
• selenium-ie-driver
• selenium-safari-driver
• selenium-htmlunit-driver
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
HtmlUnit Driver
• HtmlUnit - Java GUI-Less browser, supporting
JavaScript, to run agains web pages
• 適合沒有桌⾯面環境的 Server 執⾏行
• ⽀支援 JavaScript?
• 優點:速度快;缺點:不適合複雜的網⾴頁
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
1. @Grab('org.gebish:geb-core:0.10.0')
2. @Grab('org.seleniumhq.selenium:selenium-htmlunit-driver:2.44.0')
3. import geb.Browser
4. driver = 'htmlunit'
5.
6. Browser.drive {
7. go ...
8. }.quit()
設定 Geb Driver
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
1. @Grapes([
2. @Grab('org.gebish:geb-core:0.10.0'),
3. @Grab('org.seleniumhq.selenium:selenium-chrome-driver:2.44.0')
4. ])
5. import geb.Browser
6.
7. System.setProperty('webdriver.chrome.driver', '/tmp/chromedriver')
8.
9. driver = {
10. new org.openqa.selenium.chrome.ChromeDriver()
11.}
12.
13.Browser.drive {
14. go ...
15.}
ChromeDriver
需要先下載
chromedriver
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
RemoteWebDriver
Selenium RC Server
Selenium WebDriver
Geb
Selenium RC Client
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
RemoteWebDriver
• Launch a selenium server

java -jar selenium-server-standalone-2.44.0.jar -port 4000
→ http://192.168.0.144:4120/wd/hub
driver = new RemoteWebDriver(

new URL('http://192.168.0.144:4120/wd/hub'),

DesiredCapabilities.firefox()

)
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Cloud Browser Testing
• VM-based browsers on-demand
• 輕鬆測試各種[瀏覽器/作業系統/版本]的組合
• https://saucelabs.com/
• http://www.browserstack.com/
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
BrowserStack
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
BrowserStack
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
BrowserStack
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Geb + BrowserStack
1. def browserStackBrowser = System.getProperty("geb.browserstack.browser")
2. if (browserStackBrowser) {
3. driver = {
4. def username = System.getenv("GEB_BROWSERSTACK_USERNAME")
5. def accessKey = System.getenv("GEB_BROWSERSTACK_AUTHKEY")
6. new BrowserStackDriverFactory().create(
7. browserStackBrowser, username, accessKey)
8. }
9. }
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Testing Frameworks
Geb 可以搭配多種測試框架
• JUnit 3
• JUnit 4
• Spock
• TestNG
• Cocumber
• EasyB
Geb 與 Spock 搭配很對味
Framework JAR Class Name
Spock geb-spock geb.spock.GebSpec
JUnit 3 geb-junit3 geb.junit3.GebTest
JUnit 4 geb-junit4 geb.junit4.GebTest
TestNG geb-testng geb.testng.GebTest
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
Page Object
1. class LoginPage extends Page {
2. static url = "http://myapp.com/login"
3. static at = { heading.text() == "Please Login" }
4. static content = {
5. heading { $("h1") }
6. loginForm { $("form.login") }
7. loginButton(to: DashboardPage) { loginForm.login() }
8. }
9. }
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
GebSpec
1. class LoginSpec extends GebSpec {
2. def "login to dashboard section"() {
3. given:
4. to LoginPage
5.
6. when:
7. loginForm.with {
8. username = "admin"
9. password = "password"
10. }
11.
12. and:
13. loginButton.click()
14.
15. then:
16. at DashboardPage
17. }
18.}
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
開發流程整合
• Gradle + Geb
• https://github.com/geb/geb-example-gradle
• Maven + Geb
• https://github.com/geb/geb-example-maven
• Grails + Geb
• https://github.com/lyhcode/grails-realestate
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
官⽅方學習資源
www.gebish.org/manual/current/
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
我的教學⽂文章
1. Groovy Tutorial(7)使⽤用 Geb 開發 Web Test 網站⾃自動化測試(上)
2. Groovy Tutorial(8)使⽤用 Geb 開發 Web Test 網站⾃自動化測試(中)
3. Groovy Tutorial(9)使⽤用 Geb 開發 Web Test 網站⾃自動化測試(下)
www.codedata.com.tw/tag/groovy/
#JCConf
JCConfTW
2014
Geb
(pronounced“jeb”)
我的電⼦子書
限
時
免
費
正體中⽂文版
learngeb.readbook.tw
#JCConf
線上直接閱讀全⽂文
PDF, ePub, Kindle
離線閱讀電⼦子書檔案格式下載
幫推、按讚、分享
learngeb.readbook.tw
#JCConf
learngeb.readbook.tw
#JCConf
Thank You
Q & A
lyhcode@gmail.com
lyhcode.info

Mais conteúdo relacionado

Mais procurados

[CLIW] Web testing
[CLIW] Web testing[CLIW] Web testing
[CLIW] Web testingBogdan Gaza
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testingVladimir Roudakov
 
Node.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java sideNode.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java sideMek Srunyu Stittri
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsBrowser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsLuís Bastião Silva
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...Fwdays
 
High Performance JavaScript 2011
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011Nicholas Zakas
 
Test-Driven JavaScript Development (JavaZone 2010)
Test-Driven JavaScript Development (JavaZone 2010)Test-Driven JavaScript Development (JavaZone 2010)
Test-Driven JavaScript Development (JavaZone 2010)Christian Johansen
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend TestingNeil Crosby
 
Fullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterFullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterMek Srunyu Stittri
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP applicationJavier López
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.Javier López
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016Gavin Pickin
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Hazem Saleh
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: DemystifiedSeth McLaughlin
 
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpOptimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpMatthew Davis
 
JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具謝 宗穎
 
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)Cogapp
 
Hitchhiker's guide to the front end development
Hitchhiker's guide to the front end developmentHitchhiker's guide to the front end development
Hitchhiker's guide to the front end development정윤 김
 
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Max Andersen
 

Mais procurados (20)

[CLIW] Web testing
[CLIW] Web testing[CLIW] Web testing
[CLIW] Web testing
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing
 
Node.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java sideNode.js and Selenium Webdriver, a journey from the Java side
Node.js and Selenium Webdriver, a journey from the Java side
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsBrowser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.js
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
 
High Performance JavaScript 2011
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011
 
Test-Driven JavaScript Development (JavaZone 2010)
Test-Driven JavaScript Development (JavaZone 2010)Test-Driven JavaScript Development (JavaZone 2010)
Test-Driven JavaScript Development (JavaZone 2010)
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend Testing
 
Fullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterFullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year later
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: Demystified
 
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpOptimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
 
JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具
 
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
 
Hitchhiker's guide to the front end development
Hitchhiker's guide to the front end developmentHitchhiker's guide to the front end development
Hitchhiker's guide to the front end development
 
Acceptance tests
Acceptance testsAcceptance tests
Acceptance tests
 
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7
 

Semelhante a 淺談 Geb 網站自動化測試(JCConf 2014)

WeCode IL: Confessions of a java developer that fell in love with the groovy...
WeCode IL:  Confessions of a java developer that fell in love with the groovy...WeCode IL:  Confessions of a java developer that fell in love with the groovy...
WeCode IL: Confessions of a java developer that fell in love with the groovy...Victor Trakhtenberg
 
Javascript Apps at Build Artifacts
Javascript Apps at Build ArtifactsJavascript Apps at Build Artifacts
Javascript Apps at Build ArtifactsClay Smith
 
Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20kraqa
 
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovygreach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovyJessie Evangelista
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finessemzgubin
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finessemzgubin
 
Grooving with Jenkins
Grooving with JenkinsGrooving with Jenkins
Grooving with JenkinsAnton Weiss
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebC4Media
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails IntroductionEric Weimer
 
Java.il - Confessions of a java developer that fell in love with the groovy l...
Java.il - Confessions of a java developer that fell in love with the groovy l...Java.il - Confessions of a java developer that fell in love with the groovy l...
Java.il - Confessions of a java developer that fell in love with the groovy l...Victor Trakhtenberg
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...MarcinStachniuk
 
Geb quick start
Geb quick startGeb quick start
Geb quick startSukjin Yun
 
Creating a Responsive Website From Scratch
Creating a Responsive Website From ScratchCreating a Responsive Website From Scratch
Creating a Responsive Website From ScratchCorky Brown
 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewJosh Padnick
 
PhoneGap:你应该知道的12件事
PhoneGap:你应该知道的12件事PhoneGap:你应该知道的12件事
PhoneGap:你应该知道的12件事longfei.dong
 
Dsl로 만나는 groovy
Dsl로 만나는 groovyDsl로 만나는 groovy
Dsl로 만나는 groovySeeyoung Chang
 
Javascript testing should be awesome
Javascript testing should be awesomeJavascript testing should be awesome
Javascript testing should be awesomeAbderrazak BOUADMA
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleySven Haiges
 
Best of brew city presentation final
Best of brew city presentation finalBest of brew city presentation final
Best of brew city presentation finalEzekiel Chentnik
 

Semelhante a 淺談 Geb 網站自動化測試(JCConf 2014) (20)

WeCode IL: Confessions of a java developer that fell in love with the groovy...
WeCode IL:  Confessions of a java developer that fell in love with the groovy...WeCode IL:  Confessions of a java developer that fell in love with the groovy...
WeCode IL: Confessions of a java developer that fell in love with the groovy...
 
Javascript Apps at Build Artifacts
Javascript Apps at Build ArtifactsJavascript Apps at Build Artifacts
Javascript Apps at Build Artifacts
 
Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20
 
Whats New In Groovy 1.6?
Whats New In Groovy 1.6?Whats New In Groovy 1.6?
Whats New In Groovy 1.6?
 
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovygreach 2014 marco vermeulen bdd using cucumber jvm and groovy
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
 
Grooving with Jenkins
Grooving with JenkinsGrooving with Jenkins
Grooving with Jenkins
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and Geb
 
Groovy And Grails Introduction
Groovy And Grails IntroductionGroovy And Grails Introduction
Groovy And Grails Introduction
 
Java.il - Confessions of a java developer that fell in love with the groovy l...
Java.il - Confessions of a java developer that fell in love with the groovy l...Java.il - Confessions of a java developer that fell in love with the groovy l...
Java.il - Confessions of a java developer that fell in love with the groovy l...
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
 
Geb quick start
Geb quick startGeb quick start
Geb quick start
 
Creating a Responsive Website From Scratch
Creating a Responsive Website From ScratchCreating a Responsive Website From Scratch
Creating a Responsive Website From Scratch
 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level Overview
 
PhoneGap:你应该知道的12件事
PhoneGap:你应该知道的12件事PhoneGap:你应该知道的12件事
PhoneGap:你应该知道的12件事
 
Dsl로 만나는 groovy
Dsl로 만나는 groovyDsl로 만나는 groovy
Dsl로 만나는 groovy
 
Javascript testing should be awesome
Javascript testing should be awesomeJavascript testing should be awesome
Javascript testing should be awesome
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon Valley
 
Best of brew city presentation final
Best of brew city presentation finalBest of brew city presentation final
Best of brew city presentation final
 

Mais de Kyle Lin

物件導向系統分析與設計(建國)
物件導向系統分析與設計(建國)物件導向系統分析與設計(建國)
物件導向系統分析與設計(建國)Kyle Lin
 
Android 智慧型手機程式設計
Android 智慧型手機程式設計Android 智慧型手機程式設計
Android 智慧型手機程式設計Kyle Lin
 
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合Kyle Lin
 
行動應用開發實務 - Gradle 介紹
行動應用開發實務 - Gradle 介紹行動應用開發實務 - Gradle 介紹
行動應用開發實務 - Gradle 介紹Kyle Lin
 
2013 TQC+ Java 認證研習簡報
2013 TQC+ Java 認證研習簡報2013 TQC+ Java 認證研習簡報
2013 TQC+ Java 認證研習簡報Kyle Lin
 
FarmLogs 農場管理軟體預覽
FarmLogs 農場管理軟體預覽FarmLogs 農場管理軟體預覽
FarmLogs 農場管理軟體預覽Kyle Lin
 
TQC+物件導向程式語言Java認證班(和春資工)
TQC+物件導向程式語言Java認證班(和春資工)TQC+物件導向程式語言Java認證班(和春資工)
TQC+物件導向程式語言Java認證班(和春資工)Kyle Lin
 
Wiki 簡介與操作說明
Wiki 簡介與操作說明Wiki 簡介與操作說明
Wiki 簡介與操作說明Kyle Lin
 
Tqc+ 物件導向程式語言(java)認證研習會
Tqc+ 物件導向程式語言(java)認證研習會Tqc+ 物件導向程式語言(java)認證研習會
Tqc+ 物件導向程式語言(java)認證研習會Kyle Lin
 
ContPub 雲端電子書自助出版平台
ContPub 雲端電子書自助出版平台ContPub 雲端電子書自助出版平台
ContPub 雲端電子書自助出版平台Kyle Lin
 
TQC+團報系統學生版(雲科資管)
TQC+團報系統學生版(雲科資管)TQC+團報系統學生版(雲科資管)
TQC+團報系統學生版(雲科資管)Kyle Lin
 
TQC+ Java 認證研習
TQC+ Java 認證研習TQC+ Java 認證研習
TQC+ Java 認證研習Kyle Lin
 
20101220架構討論
20101220架構討論20101220架構討論
20101220架構討論Kyle Lin
 
Asp net (1)
Asp net  (1)Asp net  (1)
Asp net (1)Kyle Lin
 
iisnode Test Drive
iisnode Test Driveiisnode Test Drive
iisnode Test DriveKyle Lin
 
開放源碼電子書與EPUB幕後排版
開放源碼電子書與EPUB幕後排版開放源碼電子書與EPUB幕後排版
開放源碼電子書與EPUB幕後排版Kyle Lin
 
TQC+ Java 全國教師研習會 PLWeb 介紹
TQC+ Java 全國教師研習會 PLWeb 介紹TQC+ Java 全國教師研習會 PLWeb 介紹
TQC+ Java 全國教師研習會 PLWeb 介紹Kyle Lin
 
Modern Browser as a Programming Editor
Modern Browser as a Programming EditorModern Browser as a Programming Editor
Modern Browser as a Programming EditorKyle Lin
 

Mais de Kyle Lin (19)

物件導向系統分析與設計(建國)
物件導向系統分析與設計(建國)物件導向系統分析與設計(建國)
物件導向系統分析與設計(建國)
 
Android 智慧型手機程式設計
Android 智慧型手機程式設計Android 智慧型手機程式設計
Android 智慧型手機程式設計
 
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合
 
行動應用開發實務 - Gradle 介紹
行動應用開發實務 - Gradle 介紹行動應用開發實務 - Gradle 介紹
行動應用開發實務 - Gradle 介紹
 
2013 TQC+ Java 認證研習簡報
2013 TQC+ Java 認證研習簡報2013 TQC+ Java 認證研習簡報
2013 TQC+ Java 認證研習簡報
 
FarmLogs 農場管理軟體預覽
FarmLogs 農場管理軟體預覽FarmLogs 農場管理軟體預覽
FarmLogs 農場管理軟體預覽
 
TQC+物件導向程式語言Java認證班(和春資工)
TQC+物件導向程式語言Java認證班(和春資工)TQC+物件導向程式語言Java認證班(和春資工)
TQC+物件導向程式語言Java認證班(和春資工)
 
Wiki 簡介與操作說明
Wiki 簡介與操作說明Wiki 簡介與操作說明
Wiki 簡介與操作說明
 
Tqc+ 物件導向程式語言(java)認證研習會
Tqc+ 物件導向程式語言(java)認證研習會Tqc+ 物件導向程式語言(java)認證研習會
Tqc+ 物件導向程式語言(java)認證研習會
 
ContPub 雲端電子書自助出版平台
ContPub 雲端電子書自助出版平台ContPub 雲端電子書自助出版平台
ContPub 雲端電子書自助出版平台
 
TQC+團報系統學生版(雲科資管)
TQC+團報系統學生版(雲科資管)TQC+團報系統學生版(雲科資管)
TQC+團報系統學生版(雲科資管)
 
TQC+ Java 認證研習
TQC+ Java 認證研習TQC+ Java 認證研習
TQC+ Java 認證研習
 
20101220架構討論
20101220架構討論20101220架構討論
20101220架構討論
 
Asp net (1)
Asp net  (1)Asp net  (1)
Asp net (1)
 
Asp net
Asp net Asp net
Asp net
 
iisnode Test Drive
iisnode Test Driveiisnode Test Drive
iisnode Test Drive
 
開放源碼電子書與EPUB幕後排版
開放源碼電子書與EPUB幕後排版開放源碼電子書與EPUB幕後排版
開放源碼電子書與EPUB幕後排版
 
TQC+ Java 全國教師研習會 PLWeb 介紹
TQC+ Java 全國教師研習會 PLWeb 介紹TQC+ Java 全國教師研習會 PLWeb 介紹
TQC+ Java 全國教師研習會 PLWeb 介紹
 
Modern Browser as a Programming Editor
Modern Browser as a Programming EditorModern Browser as a Programming Editor
Modern Browser as a Programming Editor
 

Último

OpenChain Webinar: Universal CVSS Calculator
OpenChain Webinar: Universal CVSS CalculatorOpenChain Webinar: Universal CVSS Calculator
OpenChain Webinar: Universal CVSS CalculatorShane Coughlan
 
Enterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze IncEnterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze Incrobinwilliams8624
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxJoão Esperancinha
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?AmeliaSmith90
 
Kawika Technologies pvt ltd Software Development Company in Trivandrum
Kawika Technologies pvt ltd Software Development Company in TrivandrumKawika Technologies pvt ltd Software Development Company in Trivandrum
Kawika Technologies pvt ltd Software Development Company in TrivandrumKawika Technologies
 
Introduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntroduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntelliSource Technologies
 
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine HarmonyLeveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmonyelliciumsolutionspun
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdfMeon Technology
 
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Jaydeep Chhasatia
 
AI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyAI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyRaymond Okyere-Forson
 
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...OnePlan Solutions
 
Top Software Development Trends in 2024
Top Software Development Trends in  2024Top Software Development Trends in  2024
Top Software Development Trends in 2024Mind IT Systems
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeNeo4j
 
Sales Territory Management: A Definitive Guide to Expand Sales Coverage
Sales Territory Management: A Definitive Guide to Expand Sales CoverageSales Territory Management: A Definitive Guide to Expand Sales Coverage
Sales Territory Management: A Definitive Guide to Expand Sales CoverageDista
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsJaydeep Chhasatia
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesSoftwareMill
 
ERP For Electrical and Electronics manufecturing.pptx
ERP For Electrical and Electronics manufecturing.pptxERP For Electrical and Electronics manufecturing.pptx
ERP For Electrical and Electronics manufecturing.pptxAutus Cyber Tech
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadIvo Andreev
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampVICTOR MAESTRE RAMIREZ
 

Último (20)

OpenChain Webinar: Universal CVSS Calculator
OpenChain Webinar: Universal CVSS CalculatorOpenChain Webinar: Universal CVSS Calculator
OpenChain Webinar: Universal CVSS Calculator
 
Enterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze IncEnterprise Document Management System - Qualityze Inc
Enterprise Document Management System - Qualityze Inc
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptx
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?
 
Salesforce AI Associate Certification.pptx
Salesforce AI Associate Certification.pptxSalesforce AI Associate Certification.pptx
Salesforce AI Associate Certification.pptx
 
Kawika Technologies pvt ltd Software Development Company in Trivandrum
Kawika Technologies pvt ltd Software Development Company in TrivandrumKawika Technologies pvt ltd Software Development Company in Trivandrum
Kawika Technologies pvt ltd Software Development Company in Trivandrum
 
Introduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptxIntroduction-to-Software-Development-Outsourcing.pptx
Introduction-to-Software-Development-Outsourcing.pptx
 
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine HarmonyLeveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
Leveraging DxSherpa's Generative AI Services to Unlock Human-Machine Harmony
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdf
 
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
 
AI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyAI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human Beauty
 
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
 
Top Software Development Trends in 2024
Top Software Development Trends in  2024Top Software Development Trends in  2024
Top Software Development Trends in 2024
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG time
 
Sales Territory Management: A Definitive Guide to Expand Sales Coverage
Sales Territory Management: A Definitive Guide to Expand Sales CoverageSales Territory Management: A Definitive Guide to Expand Sales Coverage
Sales Territory Management: A Definitive Guide to Expand Sales Coverage
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retries
 
ERP For Electrical and Electronics manufecturing.pptx
ERP For Electrical and Electronics manufecturing.pptxERP For Electrical and Electronics manufecturing.pptx
ERP For Electrical and Electronics manufecturing.pptx
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and Bad
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - Datacamp
 

淺談 Geb 網站自動化測試(JCConf 2014)