执行存储在变量中的Selenium命令(Python>Webdriver)

2024-05-19 20:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个定义,允许我单击对象,而不考虑元素类型。为了实现这一点,我创建了一个包含我要运行的命令的变量。

def clickOnStaleElement(driver, objStrategy, element):
    lhs, rhs = objStrategy.split(".", 1)
    myCommand = "driver.find_element_by_"+rhs.lower()+"(\""+element+"\").click()"

我似乎无法确定如何执行存储在变量中的命令。我试过“driver.execute\u脚本()'但收到WebDriverException。尝试“exec()”、“eval()”导致文本挂起。我如何做到这一点?有更好的方法来实现这种行为吗?我意识到我是如何努力实现这种行为的,这可能不是理想的,所以我愿意用更好的方法来完成同样的任务。如果可能,我不希望为每个元素类型创建“if/then”语句。


Tags: 对象方法命令元素类型定义defdriver
2条回答

您可以创建一个字典,它提供从字符串到函数的映射,然后执行简单的查找:

strategy = {
    "id":   driver.find_element_by_id,
    "name": driver.find_element_by_name,
    ...
}
find_element = strategy.get(rhs.lower())
find_element(element).click()

您可能希望有一个默认方法,或者为rhs.lower()与字典中的任何内容都不匹配的情况做好准备。在

def clickOnStaleElement(driver, objStrategy, element):
    lhs, rhs = objStrategy.split(".",1) #ASSUMING only valid stuff comes down like "???.xpath" , "???.name" "???.id" bla bla ... we'll just keep this here for now....
    if rhs == 'xpath':
        myCommand = driver.find_eleemnt_by_xpath(element) # xpath example, you better hope you entered valid xpath as "element"
    elif rhs == 'id':
        myCommand = driver.find_eleemnt_by_id(element)
    elif rhs == 'name':
       #you get the idea
.
.
.
    else:
        print("rhs, not recognized/valid/watever")
    myCommand.click()

我会逐字地将其分解为每一个在waterver rhsis上都有自己的If语句。在

同样在我看来,没有理由让你进去“???”???。为什么不把你真正想要的东西交给他?在

相关问题 更多 >