Added webdriverio integration tests
This commit is contained in:
parent
bd02b7db8e
commit
23d629b80b
40 changed files with 10815 additions and 4163 deletions
|
@ -1,41 +0,0 @@
|
|||
from pypom import Page, Region
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
|
||||
class Base(Page):
|
||||
"""Base object model."""
|
||||
|
||||
_url = '{base_url}'
|
||||
_send_logo_locator = (By.CLASS_NAME, 'logo')
|
||||
|
||||
def __init__(self, selenium, base_url, locale='en-US', **kwargs):
|
||||
super(Base, self).__init__(
|
||||
selenium, base_url, locale=locale, timeout=20, **kwargs)
|
||||
|
||||
def wait_for_page_to_load(self):
|
||||
self.wait.until(
|
||||
lambda _: self.find_element(
|
||||
*self._send_logo_locator).is_displayed())
|
||||
return self
|
||||
|
||||
@property
|
||||
def footer(self):
|
||||
return self.Footer(self)
|
||||
|
||||
class Footer(Region):
|
||||
_root_element = (By.CLASS_NAME, 'footer')
|
||||
_legal_links = (By.CLASS_NAME, 'legalSection__link')
|
||||
|
||||
@property
|
||||
def links(self):
|
||||
return [self.Links(self, el) for el in self.find_elements(
|
||||
*self._legal_links)]
|
||||
|
||||
class Links(Region):
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.root.text.split()[0]
|
||||
|
||||
def click(self):
|
||||
self.root.click()
|
|
@ -1,17 +0,0 @@
|
|||
from selenium.webdriver.common.by import By
|
||||
|
||||
from pages.desktop.base import Base
|
||||
|
||||
|
||||
class Download(Base):
|
||||
"""Download page object model."""
|
||||
|
||||
_download_button_locator = (By.CLASS_NAME, 'btn--download')
|
||||
|
||||
def wait_for_page_to_load(self):
|
||||
self.wait.until(lambda _: self.download_btn.is_displayed())
|
||||
|
||||
@property
|
||||
def download_btn(self):
|
||||
"""Download button."""
|
||||
return self.find_element(*self._download_button_locator)
|
32
test/integration/pages/desktop/download_page.js
Normal file
32
test/integration/pages/desktop/download_page.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
import Page from './page';
|
||||
|
||||
export default class DownloadPage extends Page {
|
||||
constructor() {
|
||||
super();
|
||||
this.downloadBtnLocator = '.btn--download';
|
||||
this.downloadCompletedLocator = '.btn--complete';
|
||||
}
|
||||
|
||||
/**
|
||||
* @function waitForPageToLoad
|
||||
* @returns {Object} An object representing the page.
|
||||
* @throws ElementNotFound
|
||||
*/
|
||||
waitForPageToLoad() {
|
||||
browser.waitUntil(() => {
|
||||
browser.waitForExist(this.downloadBtnLocator);
|
||||
let el = browser.element(this.downloadBtnLocator);
|
||||
return browser.elementIdDisplayed(el.value.ELEMENT);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
downloadBtn() {
|
||||
this.waitForPageToLoad();
|
||||
return browser.click(this.downloadBtnLocator);
|
||||
}
|
||||
|
||||
get downloadComplete() {
|
||||
return this.downloadCompletedLocator;
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
from selenium.webdriver.common.by import By
|
||||
|
||||
from pages.desktop.base import Base
|
||||
|
||||
|
||||
class Home(Base):
|
||||
"""Firefox Send Home page object model."""
|
||||
|
||||
_upload_area_locator = (By.ID, 'file-upload')
|
||||
_upload_button_locator = (By.CLASS_NAME, 'btn--file')
|
||||
|
||||
@property
|
||||
def upload_btn(self):
|
||||
"""Upload button."""
|
||||
return self.find_element(*self._upload_button_locator)
|
||||
|
||||
def upload_area(self, path, cancel=False):
|
||||
"""Area that allows for drag and drop uploading.
|
||||
|
||||
Returns Progress Object.
|
||||
"""
|
||||
self.find_element(*self._upload_area_locator).send_keys(path)
|
||||
from pages.desktop.progress import Progress
|
||||
return Progress(
|
||||
self.selenium, self.base_url).wait_for_page_to_load(
|
||||
cancel_after_load=cancel)
|
22
test/integration/pages/desktop/home_page.js
Normal file
22
test/integration/pages/desktop/home_page.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import Page from './page';
|
||||
|
||||
export default class HomePage extends Page {
|
||||
constructor() {
|
||||
super();
|
||||
this.legalSectionLinks = '.legalSection .legalSection__link';
|
||||
this.readyToSendLocator = 'div#page-one button.btn';
|
||||
this.socialLinksLocator = '.socialSection__link';
|
||||
}
|
||||
|
||||
get legalLinks() {
|
||||
return this.legalSectionLinks;
|
||||
}
|
||||
|
||||
get readyToSend() {
|
||||
return this.readyToSendLocator;
|
||||
}
|
||||
|
||||
get socialLinks() {
|
||||
return this.socialLinksLocator;
|
||||
}
|
||||
}
|
15
test/integration/pages/desktop/page.js
Normal file
15
test/integration/pages/desktop/page.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
export default class Page {
|
||||
constructor() {}
|
||||
|
||||
open(path) {
|
||||
browser.url(path);
|
||||
this.waitForPageToLoad();
|
||||
}
|
||||
|
||||
/**
|
||||
* @function waitForPageToLoad
|
||||
* @returns {Object} An object representing the page.
|
||||
* @throws ElementNotFound
|
||||
*/
|
||||
waitForPageToLoad() {}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
from selenium.webdriver.common.by import By
|
||||
|
||||
from pages.desktop.base import Base
|
||||
|
||||
|
||||
class Progress(Base):
|
||||
"""Progress page object model."""
|
||||
|
||||
_cancel_button = (By.ID, 'cancel-upload')
|
||||
_progress_icon_locator = (By.CLASS_NAME, 'progress__bar')
|
||||
|
||||
def wait_for_page_to_load(self, cancel_after_load=False):
|
||||
self.wait.until(
|
||||
lambda _: self.find_element(
|
||||
*self._progress_icon_locator).is_displayed())
|
||||
if cancel_after_load:
|
||||
self.cancel_btn.click()
|
||||
return
|
||||
from pages.desktop.share import Share
|
||||
return Share(self.selenium, self.base_url).wait_for_page_to_load()
|
||||
|
||||
@property
|
||||
def cancel_btn(self):
|
||||
"""Cancel upload button."""
|
||||
return self.find_element(*self._cancel_button)
|
29
test/integration/pages/desktop/progress_page.js
Normal file
29
test/integration/pages/desktop/progress_page.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
import Page from './page';
|
||||
import SharePage from './share_page';
|
||||
|
||||
export default class ProgressPage extends Page {
|
||||
constructor() {
|
||||
super();
|
||||
this.cancelBtnLocator = '.uploadCancel';
|
||||
this.progressIconLocator = '.btn--stripes';
|
||||
}
|
||||
|
||||
/**
|
||||
* @function waitForPageToLoad
|
||||
* @returns {Object} An object representing the Share page.
|
||||
* @throws ElementNotFound
|
||||
*/
|
||||
waitForPageToLoad() {
|
||||
browser.waitUntil(() => {
|
||||
browser.waitForExist(this.progressIconLocator);
|
||||
let el = browser.element(this.progressIconLocator);
|
||||
return browser.elementIdDisplayed(el.value.ELEMENT);
|
||||
});
|
||||
let sharePage = new SharePage();
|
||||
return sharePage.waitForPageToLoad();
|
||||
}
|
||||
|
||||
get cancelBtn() {
|
||||
return this.cancelBtnLocator;
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
from selenium.webdriver.common.by import By
|
||||
|
||||
from pages.desktop.base import Base
|
||||
|
||||
|
||||
class Share(Base):
|
||||
"""SHare page object model."""
|
||||
|
||||
_share_page_locator = (By.CLASS_NAME, 'sharePage')
|
||||
_share_url_locator = (By.ID, 'fileUrl')
|
||||
|
||||
def wait_for_page_to_load(self):
|
||||
self.wait.until(
|
||||
lambda _: self.find_element(
|
||||
*self._share_page_locator).is_displayed())
|
||||
return self
|
||||
|
||||
@property
|
||||
def file_url(self):
|
||||
"""File uploaded URL."""
|
||||
return self.find_element(
|
||||
*self._share_url_locator).get_property('value')
|
22
test/integration/pages/desktop/share_page.js
Normal file
22
test/integration/pages/desktop/share_page.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import Page from './page';
|
||||
|
||||
export default class SharePage extends Page {
|
||||
constructor() {
|
||||
super();
|
||||
this.sharePageLocator = '#shareWrapper';
|
||||
this.shareUrlLocator = '#fileUrl';
|
||||
}
|
||||
|
||||
waitForPageToLoad() {
|
||||
browser.waitUntil(() => {
|
||||
browser.waitForExist(this.sharePageLocator);
|
||||
let el = browser.element(this.sharePageLocator);
|
||||
return browser.elementIdDisplayed(el.value.ELEMENT);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
get fileUrl() {
|
||||
return this.shareUrlLocator;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue