def set_item_catalog_id(cls, catalog_id_entity) -> WebElement: try: time.sleep(0.1) if catalog_id_entity.not_catalog_id_flg: radio_value = "2" elem_radio_btn = get_elem_radio_btn(cls.driver, "rcatalogid_type", radio_value) elem_radio_btn.click() set_value_select_box( cls.driver, "catalogId_exemption_reason", catalog_id_entity.not_catalog_id_reason.value) else: radio_value = "1" elem_radio_btn = get_elem_radio_btn(cls.driver, "rcatalogid_type", radio_value) elem_radio_btn.click() catalog_id_txt = catalog_id_entity.value if catalog_id_txt is not None: cls.driver.find_element_by_name("rcatalog_id").send_keys( catalog_id_txt) except NoSuchElementException as e: raise CustomError("カタログID入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("カタログID入力時にタイムアウトしました", e) except Exception as e: raise CustomError("カタログID入力時に不明なエラーが出ました", e) return elem_radio_btn
def set_item_delivery_info_display_list( cls, item_delivery_info_display_list) -> WebElement: try: elem_select = cls.driver.find_element_by_name("normal_delvdate_id") if len(item_delivery_info_display_list) == 0: return elem_select elif len(item_delivery_info_display_list) <= 2: for entity in item_delivery_info_display_list: if entity.delivery_info_type_id == 1: set_value_select_box( cls.driver, "normal_delvdate_id", entity.delivery_info_display.value) elif entity.delivery_info_type_id == 2: set_value_select_box( cls.driver, "backorder_delvdate_id", entity.delivery_info_display.value) else: raise CustomError("DBに登録されている納品情報区分が不明です。") else: raise CustomError("DBに登録されている納品情報表示が仕様より多く登録されています。") except NoSuchElementException as e: raise CustomError("納期情報の表示入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("納期情報の表示入力時にタイムアウトしました", e) except Exception as e: raise CustomError("納期情報の表示入力時に不明なエラーが出ました", e) return elem_select
def set_item_every_item_stock(cls, every_item_stock_list) -> WebElement: try: elem_h_axis = cls.driver.find_element_by_name("ha_name") elem_v_axis = cls.driver.find_element_by_name("va_name") if len(every_item_stock_list) == 0: return elem_h_axis every_item_stock_entity = every_item_stock_list[0] if every_item_stock_entity.h_axis_name is not None: elem_h_axis.send_keys(every_item_stock_entity.h_axis_name) if every_item_stock_entity.elem_v_axis is not None: elem_v_axis.send_keys(every_item_stock_entity.elem_v_axis) elem_radio_btn = get_elem_radio_btn( cls.driver, "inventory_disp_type", every_item_stock_entity.display_threshold_type.value) elem_radio_btn.click() if every_item_stock_entity.threshold is not None and \ every_item_stock_entity.display_threshold_type.value == "3": set_value_select_box(cls.driver, "inventory_disp", every_item_stock_entity.threshold) except NoSuchElementException as e: raise CustomError("項目選択肢別在庫用入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("項目選択肢別在庫用入力時にタイムアウトしました", e) except Exception as e: raise CustomError("項目選択肢別在庫用入力時に不明なエラーが出ました", e) return elem_h_axis
def set_item_image_list(cls, item_image_list) -> WebElement: try: cls.driver.find_element_by_link_text("+商品画像(4)以降を表示").click() elem_max_txt = cls.driver.find_element_by_name("image_url20") if len(item_image_list) == 0: return elem_max_txt browser = Browser(cls.driver) index = 1 for entitiy in sorted(item_image_list, key=lambda i_image: i_image.image_url): if not is_image_correct(entitiy.total_judge): continue elem_url_txt = cls.driver.find_element_by_name("image_url" + str(index)) elem_url_txt.send_keys(entitiy.image_url) if entitiy.image_alt is not None: elem_alt_txt = cls.driver.find_element_by_name( "image_alt" + str(index)) elem_alt_txt.send_keys(entitiy.image_alt) index += 1 browser.scroll_by_elem_and_offset(elem_url_txt, 100) except NoSuchElementException as e: raise CustomError("商品画像入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("商品画像入力時にタイムアウトしました", e) except Exception as e: raise CustomError("商品画像入力時に不明なエラーが出ました", e) return elem_max_txt
def delete_item(cls, elem_item: WebElement): try: elem_item.find_element_by_link_text("削除").click() cls.driver.find_elements_by_tag_name( "form")[0].find_element_by_tag_name("input").click() except NoSuchElementException as e: raise CustomError("商品削除中に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("商品削除中にタイムアウトしました", e) except Exception as e: raise CustomError("商品削除中に不明なエラーが出ました", e)
def set_item_name(cls, item_name: str) -> WebElement: try: elem_input = cls.driver.find_element_by_name("item_name") elem_input.send_keys(item_name) except NoSuchElementException as e: raise CustomError("商品名入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("商品名入力時にタイムアウトしました", e) except Exception as e: raise CustomError("商品名入力時に不明なエラーが出ました", e) return elem_input
def get_search_result_list(cls) -> List[WebElement]: try: elem_result_panel = cls.driver.find_element_by_id("tableBootstrap") return elem_result_panel.find_element_by_tag_name( "tbody").find_elements_by_tag_name("tr") except NoSuchElementException as e: raise CustomError("検索結果一覧取得時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("検索結果一覧取得時にタイムアウトしました", e) except Exception as e: raise CustomError("検索結果一覧取得時に不明なエラーが出ました", e)
def set_item_movie_url(cls, movie_url: str) -> WebElement: try: elem_txt = cls.driver.find_element_by_name("movie_url") if movie_url is not None: elem_txt.send_keys(movie_url) except NoSuchElementException as e: raise CustomError("動画(HTMLソース)入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("動画(HTMLソース)入力時にタイムアウトしました", e) except Exception as e: raise CustomError("動画(HTMLソース)入力時に不明なエラーが出ました", e) return elem_txt
def set_item_warehouse_type(cls, item_warehouse_type_entity) -> WebElement: try: elem_radio_btn = \ get_elem_radio_btn(cls.driver, "depot_flag", item_warehouse_type_entity.warehouse_type.value) elem_radio_btn.click() except NoSuchElementException as e: raise CustomError("倉庫指定入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("倉庫指定入力時にタイムアウトしました", e) except Exception as e: raise CustomError("倉庫指定入力時に不明なエラーが出ました", e) return elem_radio_btn
def set_item_amount_stock(cls, amount_stock: int) -> WebElement: try: elem_input = cls.driver.find_element_by_name("inventory") if amount_stock is not None: elem_input.send_keys(amount_stock) except NoSuchElementException as e: raise CustomError("在庫数(通常在庫)入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("在庫数(通常在庫)入力時にタイムアウトしました", e) except Exception as e: raise CustomError("在庫数(通常在庫)入力時に不明なエラーが出ました", e) return elem_input
def add_item_style(cls, item_entity, result_url: str, client_item_choice_list): try: cls.driver.get(result_url) browser = Browser(cls.driver) browser.scroll_by_elem_and_offset( cls.driver.find_element_by_id("submitButton"), 100) cls.driver.find_element_by_link_text("項目選択肢の追加・変更・削除をする").click() for cic_entity in client_item_choice_list: # 項目一覧ページ try: elem_table = cls.driver.find_element_by_xpath( "/html/body/table[17]") elem_tr_list = elem_table.find_elements_by_xpath( "./tbody/tr/td/table/tbody/tr") registed_style_list = [] for elem_tr in elem_tr_list: registed_style_list.append( elem_tr.find_elements_by_tag_name("td")[0].text) if str(cic_entity.name) in registed_style_list: print("item_id: {0}, {1} is already exist".format( str(item_entity.id), cic_entity.name)) continue except NoSuchElementException: print("No registed Item") elem_main_form = cls.driver.find_element_by_xpath( "/html/body/form") elem_main_form.find_element_by_tag_name( "table").find_element_by_tag_name("input").click() # 項目追加ページ cls.driver.find_element_by_name("choice_name").send_keys( cic_entity.name) get_elem_radio_btn(cls.driver, "style", cic_entity.item_choice_type.value).click() index_elem = 1 for iic_entity in item_entity.item_item_choice_collection: if cic_entity.id == iic_entity.client_item_choice_id: cls.driver.find_element_by_name( "value_" + str(index_elem)).send_keys( iic_entity.value) index_elem += 1 elem_regist_btn = cls.driver.find_element_by_xpath( "descendant::input[@type='submit']") elem_regist_btn.click() except NoSuchElementException as e: raise CustomError("商品の色サイズ更新時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("商品の色サイズ更新時にタイムアウトしました", e) except Exception as e: raise CustomError("商品の色サイズ更新時に不明なエラーが出ました", e)
def set_item_description_for_pc_sale( cls, description_for_pc_sale: str) -> WebElement: try: elem_txt = cls.driver.find_element_by_name("display_caption") if description_for_pc_sale is not None: elem_txt.send_keys(description_for_pc_sale) except NoSuchElementException as e: raise CustomError("PC用販売説明文入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("PC用販売説明文入力時にタイムアウトしました", e) except Exception as e: raise CustomError("PC用販売説明文入力時に不明なエラーが出ました", e) return elem_txt
def set_single_shipping_cost(cls, value: int) -> WebElement: try: elem_input = cls.driver.find_element_by_name("postage") if value is None: return elem_input elem_input.send_keys(str(value)) except NoSuchElementException as e: raise CustomError("個別送料入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("個別送料入力時にタイムアウトしました", e) except Exception as e: raise CustomError("個別送料入力時に不明なエラーが出ました", e) return elem_input
def set_item_order_sold_out_flg(cls, order_sold_out_flg: bool) -> WebElement: try: elem_check_box = cls.driver.find_element_by_name("backorder_flag") if elem_check_box.is_selected() != order_sold_out_flg: elem_check_box.click() except NoSuchElementException as e: raise CustomError("在庫切れ時の注文入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("在庫切れ時の注文入力時にタイムアウトしました", e) except Exception as e: raise CustomError("在庫切れ時の注文入力時に不明なエラーが出ました", e) return elem_check_box
def set_item_price(cls, txt: str) -> WebElement: try: elem_input = cls.driver.find_element_by_name("price") if txt is None: return elem_input elem_input.send_keys(txt) except NoSuchElementException as e: raise CustomError("販売価格入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("販売価格入力時にタイムアウトしました", e) except Exception as e: raise CustomError("販売価格入力時に不明なエラーが出ました", e) return elem_input
def is_search_last_page(cls) -> bool: try: text = cls.driver.find_element_by_class_name( "pagination-info").text r = re.compile(r"[0-9]+") sum_items = r.search(text).group(0) return len(re.compile(sum_items).findall(text)) == 2 except NoSuchElementException as e: raise CustomError("商品一覧の最終ページ判定中に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("商品一覧の最終ページ判定中にタイムアウトしました", e) except Exception as e: raise CustomError("商品一覧の最終ページ判定中に不明なエラーが出ました", e)
def set_item_search_not_display_flg( cls, search_not_display_flg: bool) -> WebElement: try: elem_check_box = cls.driver.find_element_by_name("limited_flag") if elem_check_box.is_selected() != search_not_display_flg: elem_check_box.click() except NoSuchElementException as e: raise CustomError("サーチ非表示入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("サーチ非表示入力時にタイムアウトしました", e) except Exception as e: raise CustomError("サーチ非表示入力時に不明なエラーが出ました", e) return elem_check_box
def set_item_mobile_catch_copy(cls, txt: str) -> WebElement: try: elem_input = cls.driver.find_element_by_name("mobile_catch_copy") if txt is None: return elem_input elem_input.send_keys(txt) except NoSuchElementException as e: raise CustomError("Mobile用キャッチコピー入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("Mobile用キャッチコピー入力時にタイムアウトしました", e) except Exception as e: raise CustomError("Mobile用キャッチコピー入力時に不明なエラーが出ました", e) return elem_input
def set_item_black_market_password( cls, black_market_password: str) -> WebElement: try: elem_txt = cls.driver.find_element_by_name("limited_passwd") if black_market_password is not None: elem_txt.send_keys(str(black_market_password)) except NoSuchElementException as e: raise CustomError("闇市パスワード入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("闇市パスワード入力時にタイムアウトしました", e) except Exception as e: raise CustomError("闇市パスワード入力時に不明なエラーが出ました", e) return elem_txt
def set_item_shop_category_display_rank( cls, shop_category_display_rank: int) -> WebElement: try: elem_txt = cls.driver.find_element_by_name("item_weight") if shop_category_display_rank is not None: elem_txt.send_keys(str(shop_category_display_rank)) except NoSuchElementException as e: raise CustomError("店舗内カテゴリでの表示順位入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("店舗内カテゴリでの表示順位入力時にタイムアウトしました", e) except Exception as e: raise CustomError("店舗内カテゴリでの表示順位入力時に不明なエラーが出ました", e) return elem_txt
def set_item_stock_type(cls, item_stock_type_entity) -> WebElement: try: elem_radio_btn = get_elem_radio_btn( cls.driver, 'inventory_type', item_stock_type_entity.stock_type.value) elem_radio_btn.click() except NoSuchElementException as e: raise CustomError("在庫タイプ入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("在庫タイプ入力時にタイムアウトしました", e) except Exception as e: raise CustomError("在庫タイプ入力時に不明なエラーが出ました", e) return elem_radio_btn
def set_item_noshi_type(cls, item_noshi_type_entity) -> WebElement: try: elem_radio_btn = get_elem_radio_btn( cls.driver, 'noshi_flag', item_noshi_type_entity.noshi_type.value) elem_radio_btn.click() except NoSuchElementException as e: raise CustomError("のし対応入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("のし対応入力時にタイムアウトしました", e) except Exception as e: raise CustomError("のし対応入力時に不明なエラーが出ました", e) return elem_radio_btn
def set_item_restock_button_type( cls, item_restock_button_type_entity) -> WebElement: try: elem_radio_btn = get_elem_radio_btn( cls.driver, 'stock_notify_flag', item_restock_button_type_entity.restock_button_type.value) elem_radio_btn.click() except NoSuchElementException as e: raise CustomError("再入荷お知らせボタン入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("再入荷お知らせボタン入力時にタイムアウトしました", e) except Exception as e: raise CustomError("再入荷お知らせボタン入力時に不明なエラーが出ました", e) return elem_radio_btn
def get_search_result_url_list(cls) -> List: try: url_list = [] for elem_tr in cls.get_search_result_list(): url_list.append( elem_tr.find_element_by_link_text("変更").get_attribute( "href")) return url_list except NoSuchElementException as e: raise CustomError("検索結果取得時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("検索結果取得時にタイムアウトしました", e) except Exception as e: raise CustomError("検索結果取得時に不明なエラーが出ました", e)
def submit(cls): try: cls.driver.find_element_by_id("submitButton").click() try: wait_show_finish(cls.driver) except TimeoutException: raise TimeoutException(get_validation_message(cls.driver)) except NoSuchElementException as e: raise CustomError("商品登録時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError(e) except Exception as e: raise CustomError("商品登録時に不明なエラーが出ました", e) return
def set_item_setting_back_stock_flg( cls, setting_back_stock_flg: bool) -> WebElement: try: elem_check_box = cls.driver.find_element_by_name( "restore_inventory_flag") if elem_check_box.is_selected() != setting_back_stock_flg: elem_check_box.click() except NoSuchElementException as e: raise CustomError("在庫戻し設定入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("在庫戻し設定入力時にタイムアウトしました", e) except Exception as e: raise CustomError("在庫戻し設定入力時に不明なエラーが出ました", e) return elem_check_box
def set_item_display_manufacturer_info_flg( cls, display_manufacturer_info_flg: bool) -> WebElement: try: elem_check_box = cls.driver.find_element_by_name( "display_maker_contents") if elem_check_box.is_selected() != display_manufacturer_info_flg: elem_check_box.click() except NoSuchElementException as e: raise CustomError("メーカー提供情報表示入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("メーカー提供情報表示入力時にタイムアウトしました", e) except Exception as e: raise CustomError("メーカー提供情報表示入力時に不明なエラーが出ました", e) return elem_check_box
def set_item_document_request_type( cls, item_document_request_type_entity) -> WebElement: try: elem_radio_btn = get_elem_radio_btn( cls.driver, 'panf_flag', item_document_request_type_entity.document_request_type.value) elem_radio_btn.click() except NoSuchElementException as e: raise CustomError("資料請求ボタン入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("資料請求ボタン入力時にタイムアウトしました", e) except Exception as e: raise CustomError("資料請求ボタン入力時に不明なエラーが出ました", e) return elem_radio_btn
def set_item_all_item_directory_id( cls, item_all_item_directory_id_entity) -> WebElement: try: elem_txt = cls.driver.find_element_by_name("genre_id") if item_all_item_directory_id_entity is not None: elem_txt.send_keys(item_all_item_directory_id_entity. all_item_directory_id.directory_id) except NoSuchElementException as e: raise CustomError("全商品ディレクトリID入力時に必要な要素が見つかりませんでした", e) except TimeoutException as e: raise CustomError("全商品ディレクトリID入力時にタイムアウトしました", e) except Exception as e: raise CustomError("全商品ディレクトリID入力時に不明なエラーが出ました", e) return elem_txt
def login(cls, rms_id, rms_pass, mail_address, password): # R-Login try: rms_id_txt = cls.driver.find_element_by_name("login_id") rms_id_txt.send_keys(rms_id) rms_pass_txt = cls.driver.find_element_by_name("passwd") rms_pass_txt.send_keys(rms_pass) rms_login_btn = cls.driver.find_element_by_name("submit") rms_login_btn.click() except NoSuchElementException as e: raise CustomError("R-loginログイン情報入力欄が見つかりませんでした\n", e) try: cls.driver.find_element_by_xpath( "descendant::p[contains(@class, 'rf-form-login--input-error rf-form-message rf-form-error')]" ) except NoSuchElementException: print("R-Login is success") else: raise CustomError("R-Loginに失敗しました。IDかパスワードが間違っています。") # 楽天会員認証 try: login_mailadderss_txt = cls.driver.find_element_by_name("user_id") login_mailadderss_txt.send_keys(mail_address) login_password_txt = cls.driver.find_element_by_name("user_passwd") login_password_txt.send_keys(password) login_btn = cls.driver.find_element_by_name("submit") login_btn.click() except NoSuchElementException as e: raise CustomError("楽天会員ログイン情報入力欄が見つかりませんでした\n", e) try: cls.driver.find_element_by_xpath( "descendant::p[contains(@class, 'rf-form-login--input-error rf-form-message rf-form-error')]" ) except NoSuchElementException: print("User-Login is success") else: raise CustomError("楽天Loginに失敗しました。ユーザIDかパスワードが間違っています。") # ホーム画面まで遷移 try: cls.driver.find_element_by_name("submit").click() cls.driver.find_element_by_class_name("tac").click() except NoSuchElementException: print("ログイン後ホーム画面へ遷移中に必要な要素が見つかりませんでした。") return