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?
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
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.