【问题标题】:InvalidSelectorException while passing string variable using Select_by_value function使用 Select_by_value 函数传递字符串变量时出现 InvalidSelectorException
【发布时间】:2021-11-24 11:39:15
【问题描述】:

我试图通过将一个值传递给一个字符串变量来选择它。但是得到 InvalidSelectorException: Message: invalid selector: An invalid or invalid selector was specified。

    def Assignments(url,assignto,count):
           sta = Select(driver.find_element_by_id("bulk_status"))
           sta.select_by_value('Assigned')
           sta = Select(driver.find_element_by_id("bulk_assigned_individual"))
           sta.select_by_value(str(assignto))
    Assignments(UrlForIssues[1],str(teammate),1)
    
    

UrlForIssues - 它是一个列表或 URL 队友 - 字符串变量 count 是为了别的,可以忽略。

现在的问题是当我运行程序时它会抛出异常。

InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified

当我将一些字符串传递给函数 select_by_value() 时。喜欢:

select_by_value('abc')

它工作正常,只有将它作为变量传递时才会出现错误。

可用的选项集。

<select name="bulk_assigned_individual"id="bulk_assigned_individual">
  <option value="brand-validator-queue">1 - bvq</option>
  <option value="atmakb">98 - Bharath</option>
  <option value="bvarn">98 - varun </option>
  <option value="archawla">98 - Aryan </option>
  <option value="jhiman">98 - Himanshu </option>
</select>

我已将所有值存储在一个文件中,并在一个列表中读取它。

team = open("team.txt",'r')
teammates = team.readlines()

然后在 for 循环中为我们拥有的所有选项调用 Assignments()。

for teammate in teammates:
     Assignments(UrlForIssues[1],str(teammate),1)

【问题讨论】:

  • assignto 的值是多少?你能在运行select_by_value之前把它打印出来吗?似乎 var assignto 中有一个无效的字符导致无效的 css 选择器。
  • 我尝试打印assignto,它打印的值正确。
  • 你能分享一下select标签的html并指出你要选择什么选项吗?
  • 你正在传递 teammate 告诉我们你是如何在你的代码中定义的
  • 在此之前sta.select_by_value(str(assignto)) 放置一个调试器或简单地打印print(assignto) 而不是str 然后打印print(type(assignto)) 并让我知道输出

标签: python-3.x selenium exception drop-down-menu css-selectors


【解决方案1】:

尝试如下并确认。

由于您将其作为String 变量传递,因此下面的语句将返回False:

print(assignto == options.get_attribute("value"))

所以在for 循环中检查assignto 值是否在选项value 中,然后选择该选项:

def Assignments(url,assignto,count):
    sta = Select(driver.find_element_by_id("bulk_status"))
    sta.select_by_value('Assigned')
    sta = Select(driver.find_element_by_id("bulk_assigned_individual")).options
    for opt in options:
        if assignto in options.get_attribute("value"):
            opt.click()
            break

【讨论】:

  • 感谢您的帮助,实际上我从列表中获取的变量有 NEWLINE。搞砸了。
  • 用工作代码回答你的问题,它可能对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2016-01-17
  • 2020-10-03
  • 2016-12-03
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多