def test_edit_read_aloud_text(dm_wizard, encounter_all_sections, browser): """As a dm, I can add, edit and delete a read aloud text in an encounter and the data persists.""" # noqa print( 'As a dm I can edit and delete a read aloud text in an encounter and the data persists ' ) # noqa read_aloud_text = ReadAloudTextAddModal(browser) read_aloud_table = ReadAloudTextTable(browser) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, read_aloud_text.add_plus_icon_xpath))) read_aloud_text.add_plus_icon.click() stub = ReadAloudTextFactory.stub() read_aloud_text.name = stub.name read_aloud_text.description = stub.description read_aloud_text.add.click() read_aloud_edit = ReadAloudTextEditModal(browser) read_aloud_tabs = ReadAloudTextModalTabs(browser) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, read_aloud_table.name_xpath))) read_aloud_table.name.click() edit = browser.find_elements_by_xpath(read_aloud_tabs.edit_xpath)[1] time.sleep(1) edit.click() read_aloud_edit.name = stub.name read_aloud_edit.description = stub.description read_aloud_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, read_aloud_table.name_xpath))) before_refresh_name = read_aloud_table.name.text.strip() before_refresh_description = read_aloud_table.description.text.strip() browser.refresh() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, read_aloud_table.name_xpath))) after_refresh_name = read_aloud_table.name.text.strip() after_refresh_description = read_aloud_table.description.text.strip() assert before_refresh_name == after_refresh_name assert before_refresh_description == after_refresh_description read_aloud_text.remove.click() assert read_aloud_text.add_new_point.text.strip( ) == 'Add new text for your players.'
def test_proficiency_types(player_wizard, browser): # noqa """As a player, I can mark a skill as none, half, proficient, or expertise and view these modifiers, and they are calculated correctly.""" print(('As a player, I can mark a skill as none, half, proficient, or ' 'expertise and view these modifiers, and they are calculated ' 'correctly.')) skills_table = skills.SkillsTable(browser) skills_edit = skills.SkillsEditModal(browser) tabs = Tabs(browser) tabs.skills.click() acrobatics = ut.get_table_row(skills_table, 'table', values=False) none = acrobatics[0].find_element_by_tag_name('span').get_attribute( 'class') acrobatics[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, skills_edit.half_xpath))) skills_edit.half.click() skills_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) time.sleep(.4) acrobatics = ut.get_table_row(skills_table, 'table', values=False) spans = acrobatics[0].find_element_by_tag_name('span') half = spans.find_element_by_tag_name('span').get_attribute('class') acrobatics[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, skills_edit.proficient_xpath))) skills_edit.proficient.click() skills_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) time.sleep(.4) acrobatics = ut.get_table_row(skills_table, 'table', values=False) spans = acrobatics[0].find_element_by_tag_name('span') proficient = spans.find_element_by_tag_name('span').get_attribute('class') acrobatics[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, skills_edit.expertise_xpath))) skills_edit.expertise.click() skills_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) time.sleep(.4) acrobatics = ut.get_table_row(skills_table, 'table', values=False) spans = acrobatics[0].find_element_by_tag_name('span') expertise = spans.find_element_by_tag_name('span').get_attribute('class') assert '' in none.strip() assert 'fa fa-adjust' in half.strip() assert 'fa fa-check' in proficient.strip() assert 'fa fa-check close-check' in expertise.strip()
def test_edit_trait(player_wizard, browser): # noqa """As a player, I can edit a trait.""" print('As a player, I can edit a trait.') trait = traits.TraitAddModal(browser) trait_edit = traits.TraitEditModal(browser) traits_table = traits.TraitsTable(browser) trait_tabs = traits.TraitModalTabs(browser) tabs = Tabs(browser) tabs.skills.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, traits_table.add_id))) traits_table.add.click() ut.select_from_autocomplete(trait, 'name', browser, has_search_term=False) trait.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) rows = ut.get_table_rows(traits_table, 'table', values=False) rows[0][0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, trait_tabs.edit_id))) trait_tabs.edit.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.presence_of_element_located((By.ID, trait_edit.name_id))) trait_edit.name = 'Edited Name' trait_edit.race = 'Edited Race' trait_edit.description = 'Edited Description' trait_edit.tracked.click() trait_edit.max_ = 4 trait_edit.short_rest.click() assert trait_edit.name.get_attribute('value').strip() == 'Edited Name' assert trait_edit.race.get_attribute('value').strip() == 'Edited Race' assert trait_edit.description.get_attribute( 'value').strip() == 'Edited Description' assert trait_edit.max_.get_attribute('value').strip() == '4' assert 'active' in trait_edit.short_rest.get_attribute('class').strip() trait_edit.done.click() rows = ut.get_table_rows(traits_table, 'table', values=False) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_cell_updated(traits_table, 'trait', 'Edited Name', 'table', 1)) row = ut.get_table_row(traits_table, 'table', 1) assert row.trait.strip() == 'Edited Name' assert row.race.strip() == 'Edited Race'
def test_inventory_sorting(player_wizard, browser): # noqa """As a player, I can sort the inventory table by clicking on the sortable columns.""" print(('As a player, I can sort the inventory table by clicking on the ' 'sortable columns')) inventory_add = inventory.InventoryAddModal(browser) inventory_table = inventory.InventoryTable(browser) tabs = Tabs(browser) tabs.inventory.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, inventory_table.add_id))) inventory_table.add.click() ut.select_from_autocomplete(inventory_add, 'name', browser, has_search_term=False) inventory_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) inventory_table.add.click() ut.select_from_autocomplete(inventory_add, 'name', browser, arrow_down_count=2) inventory_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) inventory_table.item_header.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( sorting_arrow_down(inventory_table.item_header_sorting_arrow, )) rows = ut.get_table_row(inventory_table, 'table', values=False) assert rows[0].text.strip() == 'Acid (vial)' inventory_table.quantity_header.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( sorting_arrow_up(inventory_table.quantity_header_sorting_arrow, )) rows = ut.get_table_row(inventory_table, 'table', values=False) assert rows[1].text.strip() == '1' inventory_table.weight_header.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( sorting_arrow_up(inventory_table.weight_header_sorting_arrow, )) rows = ut.get_table_row(inventory_table, 'table', values=False) assert rows[2].text.strip() == '1 lbs.'
def test_edit_proficiency(player_wizard, browser): # noqa """As a player, I can edit a proficiency.""" print('As a player, I can edit a proficiency.') proficiency_add = proficiency.ProficiencyAddModal(browser) proficiency_edit = proficiency.ProficiencyEditModal(browser) proficiency_table = proficiency.ProficiencyTable(browser) proficiency_tabs = proficiency.ProficiencyModalTabs(browser) tabs = Tabs(browser) tabs.skills.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, proficiency_table.add_id))) proficiency_table.add.click() ut.select_from_autocomplete(proficiency_add, 'name', browser, has_search_term=False) proficiency_add.name.send_keys(Keys.TAB) proficiency_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(proficiency_table)) rows = ut.get_table_rows(proficiency_table, 'table', values=False) rows[0][0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, proficiency_tabs.edit_id))) proficiency_tabs.edit.click() proficiency_edit.name = 'Edited Name' proficiency_edit.type_ = 'Edited Type' proficiency_edit.description = 'Edited Description' assert proficiency_edit.name.get_attribute( 'value').strip() == 'Edited Name' assert proficiency_edit.type_.get_attribute( 'value').strip() == 'Edited Type' assert proficiency_edit.description.get_attribute( 'value').strip() == 'Edited Description' proficiency_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) row = ut.get_table_row(proficiency_table, 'table', 1) assert row.proficiency.strip() == 'Edited Name' assert row.type.strip() == 'Edited Type'
def test_edit_inventory(player_wizard, browser): # noqa """As a player, I can edit an item in my inventory.""" print('As a player, I can edit an item in my inventory.') inventory_add = inventory.InventoryAddModal(browser) inventory_edit = inventory.InventoryEditModal(browser) inventory_table = inventory.InventoryTable(browser) inventory_tabs = inventory.InventoryModalTabs(browser) tabs = Tabs(browser) tabs.inventory.click() inventory_table.add.click() ut.select_from_autocomplete(inventory_add, 'name', browser, has_search_term=False) inventory_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) rows = ut.get_table_rows(inventory_table, 'table', values=False) rows[0][0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, inventory_tabs.edit_id))) inventory_tabs.edit.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.presence_of_element_located((By.ID, inventory_edit.name_id))) inventory_edit.name = 'Edit Name' inventory_edit.weight = 100 inventory_edit.quantity = 2 inventory_edit.cost = 100 inventory_edit.currency_denomination = 'GP' inventory_edit.description = 'Edit Description' assert inventory_edit.name.get_attribute('value').strip() == 'Edit Name' assert inventory_edit.weight.get_attribute('value').strip() == '100' assert inventory_edit.quantity.get_attribute('value').strip() == '2' assert inventory_edit.cost.get_attribute('value').strip() == '100' assert inventory_edit.currency_denomination.get_attribute( 'value').strip() == 'GP' assert inventory_edit.description.get_attribute( 'value').strip() == 'Edit Description' inventory_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) row = ut.get_table_row(inventory_table, 'table', 1) assert row.item.strip() == 'Edit Name' assert row.quantity.strip() == '2' assert row.weight.strip() == '100 lbs.' assert row.cost.strip() == '100 GP' assert row.description.strip() == 'Edit Description'
def test_edit_feat(player_wizard, browser): # noqa """As a player, I can edit a feat.""" print('As a player, I can edit a feat.') feat = feats.FeatAddModal(browser) feat_edit = feats.FeatEditModal(browser) feats_table = feats.FeatsTable(browser) feat_tabs = feats.FeatModalTabs(browser) tabs = Tabs(browser) tabs.skills.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, feats_table.add_id))) feats_table.add.click() ut.select_from_autocomplete(feat, 'name', browser, has_search_term=False) feat.name.send_keys(Keys.TAB) feat.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) rows = ut.get_table_rows(feats_table, 'table', values=False) rows[0][0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, feat_tabs.edit_id))) feat_tabs.edit.click() feat_tabs.edit.click() feat_edit.name = 'Edited Name' feat_edit.description = 'Edited Description' feat_edit.tracked.click() feat_edit.max_ = 4 feat_edit.short_rest.click() assert feat_edit.name.get_attribute('value').strip() == 'Edited Name' assert feat_edit.description.get_attribute( 'value').strip() == 'Edited Description' assert feat_edit.max_.get_attribute('value').strip() == '4' assert 'active' in feat_edit.short_rest.get_attribute('class').strip() feat_edit.done.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_cell_updated(feats_table, 'feat', 'Edited Name', 'table', 1)) row = ut.get_table_row(feats_table, 'table', 1) assert row.feat.strip() == 'Edited Name'
def test_magical_modifier(player_wizard, browser): # noqa """As a player, if armor is magical, a badge indicating the modifier is present.""" print(('As a player, if armor is magical, a badge indicating the ' 'modifier is present.')) armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) tabs = Tabs(browser) tabs.equipment.click() stub = ArmorFactory.stub() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, armor_table.add_id) ) ) armor_table.add.click() armor_add.name = stub.name armor_add.magical_modifier = stub.magical_modifier armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) row = ut.get_table_row(armor_table, 'table', 1) actual = ' '.join([string.strip() for string in row.armor.split()]) assert actual == '{} + {}'.format(stub.name, stub.magical_modifier)
def test_armor_donned(player_wizard, browser): # noqa """As a player, the checkbox appears when armor is donned.""" print('As a player, the checkbox appears when armor is donned.') armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, armor_table.add_id))) armor_table.add.click() ut.select_from_autocomplete(armor_add, 'name', browser, has_search_term=False) armor_add.name.send_keys(Keys.TAB) armor_add.don.click() armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(armor_table)) row = ut.get_table_row(armor_table, 'table', 1, values=False) assert 'fa fa-check' in row[0].find_element_by_tag_name( 'span').get_attribute('class').strip()
def test_delete_proficiency(player_wizard, browser): # noqa """As a player, I can delete a proficiency.""" print('As a player, I can delete a proficiency.') proficiency_add = proficiency.ProficiencyAddModal(browser) proficiency_table = proficiency.ProficiencyTable(browser) tabs = Tabs(browser) tabs.skills.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, proficiency_table.add_id))) proficiency_table.add.click() ut.select_from_autocomplete(proficiency_add, 'name', browser, has_search_term=False) proficiency_add.add.click() rows = ut.get_table_rows(proficiency_table, 'table', values=False) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) rows[0][2].find_element_by_tag_name('a').click() rows = ut.get_table_rows(proficiency_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new Proficiency'
def test_delete_armor(player_wizard, browser): # noqa """As a player, I can delete an armor.""" print('As a player, I can delete an armor.') armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, armor_table.add_id) ) ) armor_table.add.click() ut.select_from_autocomplete( armor_add, 'name', browser, has_search_term=False ) armor_add.add.click() rows = ut.get_table_rows(armor_table, 'table', values=False) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) rows[0][4].find_element_by_tag_name('a').click() rows = ut.get_table_rows(armor_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new armor'
def test_reach_ft(player_wizard, browser): # noqa """As a player, if I add a weapon with property reach, 5 ft. is added after I close the modal.""" print(('As a player, if I add a weapon with property reach, 5 ft. is ' 'added after I close the modal')) weapon_add = weapon.WeaponAddModal(browser) weapon_table = weapon.WeaponTable(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, weapon_table.add_id) ) ) weapon_table.add.click() weapon_add.name = 'Test name' weapon_add.type_ = 'Melee' weapon_add.property_ = 'Reach' weapon_add.range_ = '5' weapon_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) row = ut.get_table_row(weapon_table, 'table', values=False) assert row[4].text.strip() == '10 ft.'
def test_weapon_magical_modifier(player_wizard, browser): # noqa """As a player, if weapon is magical, a badge indicating the modifier is present.""" print(('As a player, if weapon is magical, a badge indicating the ' 'modifier is present.')) weapon_add = weapon.WeaponAddModal(browser) weapon_table = weapon.WeaponTable(browser) tabs = Tabs(browser) tabs.equipment.click() weapon_table.add.click() weapon_add.name = 'Add Name' weapon_add.magical_modifier = 3 WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, weapon_table.add_id) ) ) weapon_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) row = ut.get_table_row(weapon_table, 'table', 1) weapon_name_label = ' '.join([string.strip() for string in row.weapon.split()]) assert weapon_name_label == 'Add Name + 3'
def test_armor_donned(player_wizard, browser): # noqa """As a player, the checkbox appears when armor is donned.""" print('As a player, the checkbox appears when armor is donned.') armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) tabs = Tabs(browser) tabs.equipment.click() stub = ArmorFactory.stub() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, armor_table.add_id) ) ) armor_table.add.click() armor_add.name = stub.name armor_add.don.click() armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) row = ut.get_table_row(armor_table, 'table', 1, values=False) assert 'fa fa-check' in row[0].find_element_by_tag_name('span').get_attribute('class').strip()
def test_delete_magic_items(player_wizard, browser): # noqa """As a player, I can delete an item in my magic_items.""" print('As a player, I can delete an item to my magic_items.') magic_items_add = magic_items.MagicItemsAddModal(browser) magic_items_table = magic_items.MagicItemsTable(browser) tabs = Tabs(browser) tabs.inventory.click() magic_items_table.add.click() ut.select_from_autocomplete( magic_items_add, 'item', browser, has_search_term=False ) magic_items_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_has_data(magic_items_table) ) rows = ut.get_table_rows(magic_items_table, 'table', values=False) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) rows[0][5].find_element_by_tag_name('a').click() time.sleep(.5) rows = ut.get_table_rows(magic_items_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new magic item'
def test_magic_items_total_weight(player_wizard, browser): # noqa """As a player, in the magic_items table, total weight is calculated correctly.""" print(('As a player, in the armor table, total weight is calculated ' 'correctly')) magic_items_add = magic_items.MagicItemsAddModal(browser) magic_items_table = magic_items.MagicItemsTable(browser) tabs = Tabs(browser) tabs.inventory.click() magic_items_table.add.click() ut.select_from_autocomplete(magic_items_add, 'item', browser, has_search_term=False, search_term='b') magic_items_add.weight = 5 magic_items_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) magic_items_table.add.click() ut.select_from_autocomplete(magic_items_add, 'item', browser, has_search_term=False, search_term='b') magic_items_add.weight = 10 magic_items_add.add.click() assert magic_items_table.total_weight.text.strip() == '15 (lbs)'
def test_saving_throw_proficiency(player_wizard, browser): # noqa """As a player, I can select to become proficient in a savings throw, and this can be viewed in the table via in icon.""" print( ('As a player, I can select to become proficient in a savings throw, ' 'and this can be viewed in the table via in icon.')) saving_throw = SavingThrowTable(browser) saving_throw_edit = SavingThrowEditModal(browser) time.sleep(10) row = ut.get_table_row(saving_throw, 'table', values=False) # open edit modal row[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, saving_throw_edit.proficiency.get_attribute('id')))) saving_throw_edit.proficiency.click() saving_throw_edit.modifier.click() saving_throw_edit.done.click() # add custom wait to test for class in nested element WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) row = ut.get_table_row(saving_throw, 'table', values=False) span = row[0].find_elements(By.TAG_NAME, 'span') assert span[0].get_attribute('class').strip() == 'fa fa-check'
def test_inventory_total_weight(player_wizard, browser): # noqa """As a player, in the inventory table, total weight is calculated correctly.""" print(('As a player, in the armor table, total weight is calculated ' 'correctly')) inventory_add = inventory.InventoryAddModal(browser) inventory_table = inventory.InventoryTable(browser) tabs = Tabs(browser) tabs.inventory.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, inventory_table.add_id))) inventory_table.add.click() ut.select_from_autocomplete(inventory_add, 'name', browser, has_search_term=False) inventory_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) inventory_table.add.click() ut.select_from_autocomplete(inventory_add, 'name', browser, has_search_term=False) inventory_add.add.click() assert inventory_table.total_weight.text.strip() == '4 (lbs)'
def test_delete_feature(player_wizard, browser): # noqa """As a player, I can delete a feature.""" print('As a player, I can delete a feature.') feature = features.FeatureAddModal(browser) features_table = features.FeaturesTable(browser) tabs = Tabs(browser) tabs.skills.click() features_table.add.click() ut.select_from_autocomplete(feature, 'name', browser, has_search_term=False) feature.name.send_keys(Keys.TAB) feature.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(features_table)) rows = ut.get_table_rows(features_table, 'table', values=False) rows[0][2].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_is_empty(features_table)) rows = ut.get_table_rows(features_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new Feature'
def test_delete_spells(player_wizard, browser): # noqa """As a player, I can delete a spells.""" print('As a player, I can delete a spells.') spells_add = spells.SpellsAddModal(browser) spells_table = spells.SpellsTable(browser) tabs = Tabs(browser) tabs.spells.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, spells_table.add_id))) spells_table.add.click() ut.select_from_autocomplete(spells_add, 'name', browser, has_search_term=False) spells_add.description.click() spells_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) rows = ut.get_table_rows(spells_table, 'table', values=False) rows[0][7].find_element_by_tag_name('a').click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_is_empty(spells_table)) rows = ut.get_table_rows(spells_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new spell'
def test_delete_trait(player_wizard, browser): # noqa """As a player, I can delete a trait.""" print('As a player, I can delete a trait.') trait = traits.TraitAddModal(browser) traits_table = traits.TraitsTable(browser) tabs = Tabs(browser) tabs.skills.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, traits_table.add_id))) traits_table.add.click() ut.select_from_autocomplete(trait, 'name', browser, has_search_term=False) trait.name.send_keys(Keys.TAB) trait.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(traits_table)) rows = ut.get_table_rows(traits_table, 'table', values=False) rows[0][2].find_element_by_tag_name('a').click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_is_empty(traits_table)) rows = ut.get_table_rows(traits_table, 'table', values=False) assert rows[0][0].text.strip() == 'Add a new Trait'
def test_preview_magic_items(player_wizard, browser): # noqa """As a player, I can select a row in the magic_items table and view the item in the preview tab.""" print(('As a player, I can select a row in the magic_items table and view ' ' the item in the preview tab')) magic_items_add = magic_items.MagicItemsAddModal(browser) magic_items_table = magic_items.MagicItemsTable(browser) magic_items_preview = magic_items.MagicItemsPreviewModal(browser) tabs = Tabs(browser) tabs.inventory.click() magic_items_table.add.click() ut.select_from_autocomplete( magic_items_add, 'item', browser, has_search_term=False ) magic_items_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_has_data(magic_items_table) ) row = ut.get_table_row(magic_items_table, 'table', values=False) row[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.text_to_be_present_in_element( (By.ID, magic_items_preview.item_id), 'Adamantine Armor' ) ) preview_type_ = magic_items_preview.type_.text.split() magic_items_type = ' '.join([string.strip() for string in preview_type_]) magic_items_max_charges = ' '.join( [ string.strip() for string in magic_items_preview.max_charges.text.split() ] ) magic_items_weight = ' '.join( [ string.strip() for string in magic_items_preview.weight.text.split() ] ) assert magic_items_preview.item.text.strip() == 'Adamantine Armor' assert magic_items_preview.rarity.text.strip() == 'Uncommon' assert magic_items_type == 'Type: Armor (medium or heavy but not hide)' assert magic_items_max_charges == 'Max Charges: 0' assert magic_items_weight == 'Weight: 0 lbs.' assert 'reinforced with adamantine' in magic_items_preview.description.text.strip()
def test_preview_weapon(player_wizard, browser): # noqa """As a player, I can select a row in the weapon table and view the item in the preview tab.""" print(('As a player, I can select a row in the weapon ' 'table and view the item in the preview tab')) weapon_add = weapon.WeaponAddModal(browser) weapon_table = weapon.WeaponTable(browser) weapon_preview = weapon.WeaponPreviewModal(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, weapon_table.add_id) ) ) weapon_table.add.click() ut.select_from_autocomplete( weapon_add, 'name', browser, has_search_term=False ) weapon_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) row = ut.get_table_row(weapon_table, 'table', values=False) row[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, weapon_preview.done_xpath) ) ) assert weapon_preview.name.text.strip() == 'Battleaxe' assert weapon_preview.magical_modifier.text.strip() == '' assert weapon_preview.damage.text.strip() == '1d8 or 1d10' assert weapon_preview.to_hit_modifier.text.strip() == '0' assert weapon_preview.range_.text.strip() == '5 ft.' assert weapon_preview.type_.text.strip() == 'Melee' assert weapon_preview.proficiency.text.strip() == 'Martial' assert weapon_preview.handedness.text.strip() == 'One or Two Handed' assert weapon_preview.weight.text.strip() == '4 lbs.' assert weapon_preview.range_.text.strip() == '5 ft.' assert weapon_preview.damage_type.text.strip() == 'Slashing' assert weapon_preview.property_.text.strip() == 'Versatile' assert '' in weapon_preview.description.text.strip()
def test_preview_inventory(player_wizard, browser): # noqa """As a player, I can select a row in the inventory table and view the item in the preview tab.""" print(('As a player, I can select a row in the inventory table and view ' 'the item in the preview tab')) inventory_add = inventory.InventoryAddModal(browser) inventory_table = inventory.InventoryTable(browser) inventory_preview = inventory.InventoryPreviewModal(browser) tabs = Tabs(browser) tabs.inventory.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, inventory_table.add_id) ) ) inventory_table.add.click() ut.select_from_autocomplete( inventory_add, 'name', browser, has_search_term=False ) inventory_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_has_data(inventory_table) ) row = ut.get_table_row(inventory_table, 'table', values=False) row[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, inventory_preview.done_id) ) ) assert inventory_preview.name.text.strip() == 'Abacus' assert inventory_preview.weight.text.strip() == '2 lbs.' assert inventory_preview.quantity.text.strip() == '1' assert inventory_preview.cost.text.strip() == '2 GP' assert inventory_preview.description.text.strip() == 'Add a description via the edit tab.'
def test_preview_armor(player_wizard, browser): # noqa """As a player, I can select a row in the armor table and view the item in the preview tab.""" print(('As a player, I can select a row in the armor table and view ' 'the item in the preview tab')) armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) armor_preview = armor.ArmorPreviewModal(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, armor_table.add_id))) armor_table.add.click() ut.select_from_autocomplete(armor_add, 'name', browser, has_search_term=False) armor_add.name.send_keys(Keys.TAB) armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(armor_table)) row = ut.get_table_row(armor_table, 'table', values=False) row[0].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.text_to_be_present_in_element((By.ID, armor_preview.name_id), 'Breastplate')) armor_weight = ' '.join( [string.strip() for string in armor_preview.weight.text.split()]) armor_stealth = ' '.join( [string.strip() for string in armor_preview.stealth.text.split()]) assert armor_preview.name.text.strip() == 'Breastplate' assert armor_preview.summary.text.strip() == 'AC 14' assert armor_weight == 'Weight: 20 lbs.' assert armor_stealth == 'Stealth: Normal' assert 'metal chest piece' in armor_preview.description.text.strip()
def test_armor_total_weight(player_wizard, browser): # noqa """As a player, in the armor table, total weight is calculated correctly.""" print(('As a player, in the armor table, total weight is calculated ' 'correctly')) armor_add = armor.ArmorAddModal(browser) armor_table = armor.ArmorTable(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.ID, armor_table.add_id) ) ) armor_table.add.click() ut.select_from_autocomplete( armor_add, 'name', browser, has_search_term=False ) armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( modal_finished_closing() ) armor_table.add.click() ut.select_from_autocomplete( armor_add, 'name', browser, has_search_term=False ) armor_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.text_to_be_present_in_element( (By.ID, armor_table.total_weight_id), '40 (lbs)' ) ) assert armor_table.total_weight.text.strip() == '40 (lbs)'
def test_add_point_of_interest(dm_wizard, encounter_all_sections, browser): """As a dm, I can add read aloud text to an encounter and the data persists.""" print( 'As a dm, I can add read aloud text to an encounter and the data persists' ) point_of_interest_modal = PointOfInterestAddModal(browser) point_of_interest_table = PointOfInterestTable(browser) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, point_of_interest_modal.add_plus_icon_xpath))) point_of_interest_modal.add_plus_icon.click() stub = PointOfInterestFactory.stub() point_of_interest_modal.name = stub.name point_of_interest_modal.description = stub.description point_of_interest_modal.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, point_of_interest_table.name_xpath))) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( table_has_data(point_of_interest_table)) before_refresh_name = point_of_interest_table.name.text.strip() before_refresh_description = point_of_interest_table.description.text.strip( ) browser.refresh() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, point_of_interest_table.name_xpath))) after_refresh_name = point_of_interest_table.name.text.strip() after_refresh_description = point_of_interest_table.description.text.strip( ) assert before_refresh_name == after_refresh_name assert before_refresh_description == after_refresh_description
def test_melee_ft(player_wizard, browser): # noqa """As a player, if I add a melee weapon, the range of 5 ft. is assigned after I close the modal.""" print(('As a player, if I add a melee weapon, the range of 5 ft. is ' 'assigned after I close the modal')) weapon_add = weapon.WeaponAddModal(browser) weapon_table = weapon.WeaponTable(browser) tabs = Tabs(browser) tabs.equipment.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, weapon_table.add_id))) weapon_table.add.click() weapon_add.name = 'Test name' weapon_add.damage = '4d6' weapon_add.type_ = 'Melee' weapon_add.magical_modifier = 1 weapon_add.to_hit_modifier = 2 weapon_add.handedness = 'Handedness' weapon_add.proficiency = 'Proficiency' weapon_add.price = 200 weapon_add.currency_denomination = 'GP' weapon_add.weight = 100 weapon_add.range_ = '0' weapon_add.damage_type = 'Damage Type' weapon_add.property_ = 'Property' weapon_add.quantity = 2 weapon_add.description = 'Description' WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, weapon_add.add_id))) weapon_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(weapon_table)) row = ut.get_table_row(weapon_table, 'table', values=False) assert row[4].text.strip() == '5 ft.'
def test_add_map_or_image(dm_wizard, encounter_all_sections, browser): """As a dm, I can add a map or image to an encounter and the data persists.""" print( 'As a dm, I can add a map or image to an encounter and the data persists' ) # noqa map_or_image_modal = MapOrImageAddModal(browser) map_or_image_table = MapOrImageTable(browser) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable( (By.XPATH, map_or_image_modal.add_plus_icon_xpath))) map_or_image_modal.add_plus_icon.click() stub = MapOrImageFactory.stub() map_or_image_modal.name = stub.name map_or_image_modal.link = stub.image_link map_or_image_modal.description = stub.description map_or_image_modal.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, map_or_image_table.name_xpath))) WebDriverWait(browser, DEFAULT_WAIT_TIME).until(table_has_data(map_or_image_table)) before_refresh_name = map_or_image_table.name.text.strip() before_refresh_description = map_or_image_table.description.text.strip() browser.refresh() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.XPATH, map_or_image_table.name_xpath))) after_refresh_name = map_or_image_table.name.text.strip() after_refresh_description = map_or_image_table.description.text.strip() assert before_refresh_name == after_refresh_name assert before_refresh_description == after_refresh_description
def test_preview_spells(player_wizard, browser): # noqa """As a player, I can select a row in the spells table and view the item in the preview tab.""" print(( 'As a player, I can select a row in the spells table and view the item in the ' 'preview tab')) spells_add = spells.SpellsAddModal(browser) spells_table = spells.SpellsTable(browser) spells_tabs = spells.SpellsModalTabs(browser) spells_preview = spells.SpellsPreviewModal(browser) tabs = Tabs(browser) tabs.spells.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, spells_table.add_id))) spells_table.add.click() ut.select_from_autocomplete(spells_add, 'name', browser, has_search_term=False) spells_add.description.click() # added blur to facilitate click on Add spells_add.add.click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until(modal_finished_closing()) row = ut.get_table_row(spells_table, 'table', values=False) row[1].click() WebDriverWait(browser, DEFAULT_WAIT_TIME).until( EC.element_to_be_clickable((By.ID, spells_tabs.edit_id))) assert spells_preview.name.text.strip() == 'Acid Arrow' assert spells_preview.spell_summary_label.text.strip( ) == 'Evocation, Level 2' assert spells_preview.type_.text.strip() == 'Ranged Spell Attack' assert spells_preview.damage.text.strip() == '4d4' assert spells_preview.cast_time.text.strip() == '1 action' assert spells_preview.range_.text.strip() == '90 feet' assert spells_preview.components.text.strip() == 'V, S, M' assert spells_preview.duration.text.strip() == 'Instantaneous'