如何使用变量名来存储字符串,在Selenium Webdriver(Python)中找到包含特定文本的元素?

时间:2017-03-06 23:06:03

标签: selenium xpath selenium-webdriver

我使用以下行选择在网页上查找特定文本的元素:

driver.find_element_by_xpath("//*[contains(text(), 'my string')]")

这很好用。

但是,如果我将字符串赋值给一个变量并尝试使用该行中的变量(如下所示),我会得到一个异常,说明该表达式是不合法的。

varname = 'my string'
driver.find_element_by_xpath("//*[contains(text(), varname)]")

我想多次重复此搜索以获得一些字符串而无需反复写入该行。我的最终目标是拥有一个我迭代的字符串列表,如下所示:

mystrings = ('my first string','my second string','my third string')
for x in mystrings:
    driver.find_element_by_xpath("//*[contains(text(), x)]")

1 个答案:

答案 0 :(得分:1)

因为它确实在寻找文本“varname”。您需要格式化文本以传递变量:

varname = 'my string'
driver.find_element_by_xpath("//*[contains(text(), '%s')]" % varname)  # option 1
driver.find_element_by_xpath("//*[contains(text(), '{0}')]".format(varname))  # option 2

任一选项都可以使用,只取决于你喜欢格式化字符串的方式。

同样适用于列表:

mystrings = ['my first string','my second string','my third string']
for x in mystrings:
    driver.find_element_by_xpath("//*[contains(text(), '%s')]" % x)
编辑:忘了包含单引号。代码已更新。