Mam stronę internetową, na której muszę sprawdzić funkcjonalność drukowania. Kliknąłem na ikonę drukowania na stronie internetowej i otworzyło mi się nowe okno ze stroną podglądu wydruku. Na tej stronie muszę kliknąć ikonę drukowania, a poniżej znajduje się kod, który próbowałem z ramą robota + Python

Sampleprint.robot

*** Settings ***
Library    Selenium2Library
Library    printfunc.py

*** Test Case ***
Validate Downloads Page Title
    Open Browser    http://samplewebsite.com   chrome
    wait until page contains element  //*[@id="introduction-container"]  10s
    keypress
    sleep  4s
    ${output}=    Get Title Present Under Shadow Root Element

Printfunc.py

from robot.libraries.BuiltIn import BuiltIn


def expand_shadow_element(driver, element):
    shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
    return shadow_root


def get_title_present_under_shadow_root_element():
    selenium2lib = BuiltIn().get_library_instance('Selenium2Library')
    # following line returns webdriver initiated in robot-framework
    driver = selenium2lib.driver

    # # shadow root locator - preceding tag of #shadow-root
    root1 = driver.find_element_by_tag_name('print-preview-app')
    shadow_root1 = expand_shadow_element(driver, root1)
    return shadow_root1

Podczas wykonywania tego skryptu zawsze wyświetla mi się poniższy komunikat o błędzie

NoSuchElementException: Message: no such element: Nie można zlokalizować elementu: {"method": "css selector", "selector": "print-preview-app"}

Czy ktoś może mi w tym pomóc?

0
Uday 19 grudzień 2019, 15:59
Patrzę na Twój przykładowy kod, ale nie widzę, gdzie przechodzisz do nowego okna. Selenium nie widzi, kiedy otwiera się nowe okno, musisz przełączyć się do niego za pomocą słowa kluczowego.
 – 
Pekka
30 grudzień 2019, 16:52

1 odpowiedź

Nie mogę dokładnie ocenić, nie widząc kodu HTML strony, ale najprawdopodobniej jest to wpływ iframe.

Sprawdź, czy na górze elementu, którego szukasz, znajduje się ramka iframe, a jeśli tak, zapoznaj się z sekcją dotyczącą przełączania ramek iframe z następujących źródeł

from robot.libraries.BuiltIn import BuiltIn

def expand_shadow_element(driver, element):
    shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
    return shadow_root

def get_title_present_under_shadow_root_element():
    selenium2lib = BuiltIn().get_library_instance('Selenium2Library')
    # following line returns webdriver initiated in robot-framework
    driver = selenium2lib.driver

    #add iframe
    driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

    # # shadow root locator - preceding tag of #shadow-root
    root1 = driver.find_element_by_tag_name('print-preview-app')
    shadow_root1 = expand_shadow_element(driver, root1)
    return shadow_root1
1
roy cha 23 grudzień 2019, 07:36
Dzięki za odpowiedź. Ale na tej stronie html nie ma elementu iframe.
 – 
Uday
23 grudzień 2019, 12:38