Waity w Selenium WebDriver
[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" hundred_percent_height_center_content="yes" equal_height_columns="no" menu_anchor="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" publish_date="" class="" id="" background_color="" background_image="" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" video_mp4="" video_webm="" video_ogv="" video_url="" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" video_preview_image="" border_size="" border_color="" border_style="solid" margin_top="" margin_bottom="" padding_top="" padding_right="" padding_bottom="" padding_left=""][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" hover_type="none" border_size="0" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" padding_top="" padding_right="" padding_bottom="" padding_left="" margin_top="" margin_bottom="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" last="no"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id=""] Dzisiaj w kąciku technicznym bonus dotyczący Selenium - znany, powszechny i popularny. Gdy szukamy elementów na stronie, czasem zdarza się, że chcemy działać na elemencie który się jeszcze nie pojawił, bo strona się doczytuje. Selenium, robi wiele rzeczy "instant", dlatego warto używać waitów (ważne - nie mieszamy implicite wait z explicit wait!). Ale po co pisać wiele razy to samo (DRY - Don't Repeat Yourself). Aby tego uniknąć, można napisać funkcje (ew. metody) odpowiednio szybkie do wprowadzania, a powodujące, że nie piszemy x razy tego samego kodu, poniżej przykłady dla Kotlina i Pythona 3. Funkcja odpowiadająca za klikanie, po uprzednim oczekiwaniu aż element będzie klikalny, a także funkcja zwracająca WebElement gdy będzie on widoczny. Obie wyszukujące po By.

W Kotlin:

import org.openqa.selenium.By import org.openqa.selenium.support.ui.WebDriverWait import org.openqa.selenium.support.ui.ExpectedConditions val webDriverWait = WebDriverWait(driver, timeInSeconds) fun clickBy(by: By){ webDriverWait.until(Expected.conditions.elementToBeClickable(by).click() } fun webElementBy(by: By): WebElement{ return webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(by)) }

przykład użycia:

fun testKlikania(){ clickBy(By.id("id")) } val webElementTestowy = webElementBy(By.name("name"))

W Python 3:

from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By web_driver_wait = WebDriverWait(driver, time_in_seconds) def click_by(by, argument): web_driver_wait.until(EC.element_to_be_clickable((by, argument))).click() def web_element_by(by, argument): return web_driver_wait.until(EC.visibility_of_element_located((by, argument)))

przykład użycia:

def test_klikania(): click_by(By.ID, "id") web_element_testowy = web_element_by(By.NAME, "name")[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Leave a Reply

Your email address will not be published. Required fields are marked *