Dactyloidae/mobile/ios/XCUITests/TopTabsTest.swift
2026-06-26 21:04:09 -07:00

178 lines
6.4 KiB
Swift

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import XCTest
let url = "www.mozilla.org"
let urlLabel = "Internet for people, not profit — Mozilla"
let urlValue = "mozilla.org"
let urlYah = "www.yahoo.com"
let urlLabelYah = "Yahoo"
let urlValueYah = "yahoo"
let urlExample = "example.com"
class TopTabsTest: BaseTestCase {
var navigator: Navigator!
var app: XCUIApplication!
override func setUp() {
super.setUp()
app = XCUIApplication()
navigator = createScreenGraph(app).navigator(self)
}
override func tearDown() {
super.tearDown()
}
func testAddTabFromSettings() {
navigator.createNewTab()
navigator.openURL(urlString: url)
waitForValueContains(app.textFields["url"], value: urlValue)
waitforExistence(app.buttons["Show Tabs"])
let numTab = app.buttons["Show Tabs"].value as? String
XCTAssertEqual("2", numTab)
}
func testAddTabFromTabTray() {
navigator.goto(TabTray)
navigator.openURL(urlString: url)
waitUntilPageLoad()
waitForValueContains(app.textFields["url"], value: urlValue)
// The tabs counter shows the correct number
let tabsOpen = app.buttons["Show Tabs"].value
XCTAssertEqual("2", tabsOpen as? String)
// The tab tray shows the correct tabs
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
}
private func checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: Int) {
let numTabsOpen = app.collectionViews.cells.count
XCTAssertEqual(numTabsOpen, UInt(expectedNumberOfTabsOpen), "The number of tabs open is not correct")
}
func testAddTabFromContext() {
navigator.openURL(urlString: urlExample)
// Initially there is only one tab open
let tabsOpenInitially = app.buttons["Show Tabs"].value
XCTAssertEqual("1", tabsOpenInitially as? String)
// Open link in a different tab and switch to it
waitforExistence(app.webViews.links.staticTexts["More information..."])
app.webViews.links.staticTexts["More information..."].press(forDuration: 5)
app.buttons["Open in New Tab"].tap()
waitUntilPageLoad()
// Open tab tray to check that both tabs are there
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells["Example Domain"])
waitforExistence(app.collectionViews.cells["IANA — IANA-managed Reserved Domains"])
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 2)
}
// This test only runs for iPhone see bug 1409750
func testAddTabByLongPressTabsButton() {
navigator.goto(BrowserTab)
app.buttons["TabToolbar.tabsButton"].press(forDuration: 1)
waitforExistence(app.buttons["New Tab"])
app.buttons["New Tab"].tap()
navigator.goto(TabTray)
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 2)
}
// This test only runs for iPhone see bug 1409750
func testAddPrivateTabByLongPressTabsButton() {
navigator.goto(BrowserTab)
app.buttons["TabToolbar.tabsButton"].press(forDuration: 1)
waitforExistence(app.buttons["New Private Tab"])
app.buttons["New Private Tab"].tap()
navigator.goto(TabTray)
waitforExistence(app.buttons["TabTrayController.maskButton"])
XCTAssertTrue(app.buttons["TabTrayController.maskButton"].isEnabled)
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 1)
}
func testSwitchBetweenTabs() {
// Open two urls from tab tray and switch between them
navigator.openURL(urlString: url)
navigator.goto(TabTray)
navigator.openURL(urlString: urlYah)
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
app.collectionViews.cells[urlLabel].tap()
waitForValueContains(app.textFields["url"], value: urlValue)
navigator.nowAt(BrowserTab)
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabelYah])
app.collectionViews.cells[urlLabelYah].tap()
waitForValueContains(app.textFields["url"], value: urlValueYah)
}
func testCloseOneTab() {
navigator.openURL(urlString: url)
waitUntilPageLoad()
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
// 'x' button to close the tab is not visible, so closing by swiping the tab
app.collectionViews.cells[urlLabel].swipeRight()
// After removing only one tab it automatically goes to HomepanelView
waitforExistence(app.collectionViews.cells["TopSitesCell"])
XCTAssert(app.buttons["HomePanels.TopSites"].exists)
}
func testCloseAllTabsUndo() {
// A different tab than home is open to do the proper checks
navigator.openURL(urlString: url)
waitUntilPageLoad()
navigator.createSeveralTabsFromTabTray (numberTabs: 3)
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 4)
// Close all tabs, undo it and check that the number of tabs is correct
navigator.closeAllTabs()
app.buttons["Undo"].tap()
navigator.nowAt(BrowserTab)
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 4)
}
func testCloseAllTabs() {
// A different tab than home is open to do the proper checks
navigator.openURL(urlString: url)
waitUntilPageLoad()
// Add several tabs from tab tray menu and check that the number is correct before closing all
navigator.createSeveralTabsFromTabTray (numberTabs: 3)
navigator.goto(TabTray)
waitforExistence(app.collectionViews.cells[urlLabel])
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 4)
// Close all tabs and check that the number of tabs is correct
navigator.closeAllTabs()
navigator.goto(TabTray)
waitforNoExistence(app.collectionViews.cells[urlLabel])
checkNumberOfTabsExpectedToBeOpen(expectedNumberOfTabsOpen: 1)
}
}