【问题标题】:Call for global variable in JS block of Selenium Webdriver test (Python)在 Selenium Webdriver 测试(Python)的 JS 块中调用全局变量
【发布时间】:2019-12-23 07:44:28
【问题描述】:

我有一串由用户设置的数字。在 Webdriver 测试开始时定义:

numbers = input("prompt")

然后我需要像这样通过JS代码输入这个变量的值:

driver.execute_script("document.getElementsByName('phone')[0].value=***")

我需要“数字”变量的值而不是 ***。我应该如何正确插入它才能使其工作?

【问题讨论】:

    标签: selenium variables testing webdriver


    【解决方案1】:

    这就是你想要做的。

    numbers = input("prompt")
    driver.execute_script("document.getElementsByName('phone')[0].value={}".format(numbers))
    

    文档链接: https://docs.python.org/3/library/string.html

    还有来自文档的片段:

    field_name 本身以 arg_name 开头,该 arg_name 可以是数字或关键字。如果它是一个数字,它引用一个位置参数,如果它是一个关键字,它引用一个命名关键字参数。如果格式字符串中的数字 arg_names 依次为 0、1、2、……,它们都可以省略(不仅仅是一些),并且数字 0、1、2……将自动按该顺序插入。因为 arg_name 不是用引号分隔的,所以不能在格式字符串中指定任意字典键(例如,字符串 '10' 或 ':-]')。 arg_name 后面可以跟任意数量的索引或属性表达式。 '.name' 形式的表达式使用 getattr() 选择命名属性,而 '[index]' 形式的表达式使用 getitem() 进行索引查找。

    3.1 版更改:str.format() 可以省略位置参数说明符,因此 '{} {}'.format(a, b) 等效于 '{0} {1}'.format(一,乙)。

    numbers = input("prompt")
    driver.execute_script("document.getElementsByName('phone')[0].value=%s" % numbers)
    

    在此处查看两者的示例: https://pyformat.info/

    【讨论】:

      【解决方案2】:

      如果你的python变量的值是没有单引号或特殊字符的简单字符串,你可以简单地使用:

      driver.execute_script("document.getElementsByName('phone')[0].value='" +
          python_variable + "'");
      

      如果其中有引号,或者需要转义的特殊字符,或者根本不是字符串,则需要获取 Python 变量值的 JavaScript 字符串表示形式。 json.dumps 将为您处理所有必要的格式化和转义,适合您的变量类型:

      from json import dumps
      
      driver.execute_script("document.getElementsByName('phone')[0].value=" +
          dumps(python_variable))
      

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-10-26
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        相关资源
        最近更新 更多