Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf ·...

43
Maintenance of Selenium Tests for Web Applications Laurent Christophe, Reinout Stevens, Coen De Roover, Wolfgang De Meuter {lachrist,resteven,cderoove,wdmeuter}@vub.ac.be

Transcript of Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf ·...

Page 1: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Maintenance of Selenium Tests for Web Applications

Laurent Christophe, Reinout Stevens, Coen De Roover, Wolfgang De Meuter{lachrist,resteven,cderoove,wdmeuter}@vub.ac.be

Page 2: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What is Selenium?

Page 3: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Selenium automates

browsers!

What is Selenium?

Page 4: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What is Selenium?

Commands

DOM-Info

Page 5: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What is Selenium?

Commands

DOM-Info

Page 6: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What is Selenium?

Commands

DOM-Info

API

Page 7: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 8: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 9: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 10: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 11: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 12: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 13: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 14: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 15: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Page 16: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage

Date of birth

Page 17: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage"date-of-birth"

Date of birth

Page 18: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage"date-of-birth"

Date of birth dd/mm/yyyy

Page 19: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage"date-of-birth"

"19/08/1989"

Date of birth dd/mm/yyyy

Page 20: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage"date-of-birth"

"19/08/1989"

grown-up

Page 21: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

WebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Test Breakage"date-of-birth"

"19/08/1989"

"grown-up"

grown-up

Page 22: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Scraping GitHub

Page 23: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Scraping GitHub

Page 24: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Scraping GitHub

Page 25: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Scraping GitHub

Gene Atlas, EEG, MiFos, Tama, OpenLMIS, XWiki, Zanata, Zimbra

Page 26: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●

●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●

●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 1000 2000 3000 4000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

Change History ViewOPEN-LMIS

Page 27: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●

●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●

●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 1000 2000 3000 4000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●

●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●

●●

●●●●●

●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●

●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●

●●●●●●●●●●●●●●●●●●

●●●●●●●●●

●●●●●●

●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●

●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●

●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●

●●●●

●●

●●

●●●●●●●●●●●●

●●

●●

●●●●●●●●●●●●●●●●●

●●

●●●●●

●●●●

●●●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 500 1000 1500 2000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●● ●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●● ●●●●●●● ● ●●●●●●●●●●●●●● ●●●●●●●●●

●●●●●●●●●●●●● ●●●●●●●●● ●●●●●●●●●●

●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●● ●● ●●●●● ●●●●●●●●●

●● ●●●●●● ●●●●●●●●●●●●●●●● ●● ●●●●●● ● ●●● ●●●●

0

500

1000

0 500 1000 1500CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

Atlas

Motech

Change History ViewOPEN-LMIS

Page 28: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Co-Evolution Metrics

Selenium activity

Application activity

Page 29: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Co-Evolution Metrics

1.59 Commits 0.66 Days

11.23 Commits 4.33 Days

Selenium activity

Application activity

Page 30: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Co-Evolution Metrics

1.59 Commits 0.66 Days

11.23 Commits 4.33 Days

Selenium activity

Application activity

R.I.P.

Page 31: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Co-Evolution Metrics

190 Days - 510 Commits - 2.3 Modifications

1.59 Commits 0.66 Days

11.23 Commits 4.33 Days

Selenium activity

Application activity

R.I.P.

Page 32: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 33: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 34: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 35: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

@Test, @After, @Bug, ...

Page 36: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 37: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 38: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

0.0

0.1

0.2

0.3

0.4

assertion command constant demarcator locationChange Classification

Cha

nge

Hit

Rat

io

Change OccurrenceWebDriver driver = new FirefoxDriver(); driver.get("http://www.birthdate.com"); WebElement field = driver.findElement(By.name("birthdate")); field.sendKeys("19-08-1989"); field.submit(); assertEquals(driver.getTitle(), "adult"); driver.quit();

Page 39: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What to Take Home

Page 40: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What to Take Home

Automated functional testing is a real “thing”!

Page 41: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What to Take Home

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●

●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●

●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 1000 2000 3000 4000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

Test scripts co-evolve with the rest of the application

Automated functional testing is a real “thing”!

Page 42: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What to Take Home

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●

●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●

●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 1000 2000 3000 4000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

Test scripts co-evolve with the rest of the application

Automated functional testing is a real “thing”!

Test scripts survive very few changes

Page 43: Maintenance of Selenium Tests for Web Applicationssoft.vub.ac.be/.../OpenToolDemo/7-Selenium.pdf · added−selenium delete−regular delete−selenium edit−regular edit−selenium

What to Take Home

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●

●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●

●● ●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●

●●●●●●●●●●●●●

●●●●●●●●●●

●●●●

●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●●●●●●

●●●●●●●●●●●●●●●●●

0

500

1000

1500

0 1000 2000 3000 4000CommitId

FileId

ChangeType● added−regular

added−seleniumdelete−regulardelete−seleniumedit−regularedit−selenium

Test scripts co-evolve with the rest of the application

Automated functional testing is a real “thing”!

Test scripts survive very few changes

Many test repairs involve constants