【问题标题】:How to Click on Print button on Print preview page using Python or Robot framework如何使用 Python 或机器人框架在打印预览页面上单击打印按钮
【发布时间】:2019-12-19 12:59:42
【问题描述】:

我有一个网站,是否需要验证打印功能。我点击了网站上的打印图标,它为我打开了一个带有打印预览页面的新窗口。在此页面中,我需要单击打印图标。下面是我尝试使用机器人框架 + 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

当执行这个脚本时,它总是在下面显示错误信息

NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":"print-preview-app"}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我正在查看您的示例代码,但没有看到您切换到新窗口的位置。 Selenium 看不到新窗口何时打开,您必须使用关键字切换到它。

标签: python selenium selenium-webdriver robotframework


【解决方案1】:

不看页面的html我无法准确判断,但很可能是iframe影响。

检查您要查找的元素顶部是否有 iframe,如果有,请参阅从以下来源切换 iframe 的部分

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

【讨论】:

  • 感谢您的回复。但是那个 html 页面中没有 iframe。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多