【问题标题】:Add string to xPath in Selenium在 Selenium 中将字符串添加到 xPath
【发布时间】:2014-04-16 14:02:32
【问题描述】:

我正在尝试将字符串添加到 Selenium 中元素 xpath 的查找中

box = driver.find_element_by_xpath("//label[contains(text(),'Room 227 4:30 AM')]/..")

上面写着“227 号房间 4:30 AM”的部分需要这样我才能添加我自己的东西。 我试图这样做,它给了我一个奇怪的字符串不是有效的 xpath

box = driver.find_element_by_xpath("//label[contains(text(),'+newroomtime+')]/..")

newroomtime 是一个字符串

newrooomtime = 'Room 228 1:00 AM'

【问题讨论】:

  • 您似乎不匹配单引号和双引号。也许你应该做类似"//label[contains(text(),'"+newroomtime+"')]/.."

标签: python string selenium xpath selenium-webdriver


【解决方案1】:

使用string formatting。将占位符 %s 放入 xpath 字符串中,并用变量值填充:

xpath = "//label[contains(text(),'%s')]/.." % newrooomtime
box = driver.find_element_by_xpath(xpath)

演示:

>>> newrooomtime = 'Room 228 1:00 AM'
>>> xpath = "//label[contains(text(),'%s')]/.." % newrooomtime
>>> xpath
"//label[contains(text(),'Room 228 1:00 AM')]/.."

【讨论】:

    【解决方案2】:

    alecxe 的答案在功能上是正确的,但是除非我弄错了,否则您可以在同一行中执行这两项操作,这样可以使代码更简洁,因为您不需要定义只会使用一次的变量。

    代替:

    xpath = "//label[contains(text(),'%s')]/.." % newroomtime
    box = driver.find_element_by_xpath(xpath)
    

    我会使用:

    box = driver.find_element_by_xpath('//label[contains(text(),"%s")]/..' % newroomtime)
    

    此外,我尽量不要将 driver.find_element 操作粘贴到变量中,除非我真的想将它们与其他东西进行比较。这又是一个保持代码清洁不需要的额外变量的问题。

    【讨论】:

    • 我没有看到任何问题,因为你称之为不需要的变量。它更容易阅读,因此是一种很好的做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多