执行存储在变量中的 Selenium 命令(Python > Webdriver)
Executing a Selenium command stored in a variable (Python > Webdriver)
我正在尝试创建一个定义,使我可以在不考虑元素类型的情况下单击对象。为此,我创建了一个变量,其中包含我想要 运行.
的命令
def clickOnStaleElement(driver, objStrategy, element):
lhs, rhs = objStrategy.split(".", 1)
myCommand = "driver.find_element_by_"+rhs.lower()+"(\""+element+"\").click()"
我似乎无法弄清楚如何执行存储在变量中的这条命令。我尝试了 'driver.execute_script()' 但收到了 WebDriverException。尝试“exec()”和“eval()”导致文本挂起。我如何实现这一目标?有没有更好的方法来实现这种行为?我意识到我尝试实现此行为的方式可能并不理想,因此我愿意接受更好的方法来完成相同的任务。如果可能,我不想为每种元素类型创建 'if/then' 语句。
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()
我会从字面上将其分解为每个在 rhs
上都有自己的 If 语句。
同样在我看来,没有理由将像这样的“???.somethng”传递给 objStrategy,为什么不传递你真正想要的东西呢?
您可以创建一个字典,提供从字符串到函数的映射,然后进行简单的查找:
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)
myCommand = "driver.find_element_by_"+rhs.lower()+"(\""+element+"\").click()"
我似乎无法弄清楚如何执行存储在变量中的这条命令。我尝试了 'driver.execute_script()' 但收到了 WebDriverException。尝试“exec()”和“eval()”导致文本挂起。我如何实现这一目标?有没有更好的方法来实现这种行为?我意识到我尝试实现此行为的方式可能并不理想,因此我愿意接受更好的方法来完成相同的任务。如果可能,我不想为每种元素类型创建 'if/then' 语句。
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()
我会从字面上将其分解为每个在 rhs
上都有自己的 If 语句。
同样在我看来,没有理由将像这样的“???.somethng”传递给 objStrategy,为什么不传递你真正想要的东西呢?
您可以创建一个字典,提供从字符串到函数的映射,然后进行简单的查找:
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()
与字典中的任何内容都不匹配的情况做准备。