使用ruby访问Javascript值

时间:2014-03-13 14:20:29

标签: javascript ruby cucumber watir

我是Ruby的新手,遇到了一些我无法弄清楚的东西。我正在尝试编写一个测试来访问javascript中的变量,该变量告诉用户登陆的页面类型,但我不知道该怎么做。任何帮助或解释将非常感谢。这是源代码(我需要访问页面上s.prop5中的值并根据它做出决定):

<script language="JavaScript"><!--
s.pageName="Outdoor : "
s.server=""
s.channel=""
//s.pageType=""
s.prop1=""
s.prop2=""
s.prop3=""
s.prop5="Department"

3 个答案:

答案 0 :(得分:4)

没有必要编写复杂的正则表达式来解析html以检索所需的值,因为Watir::Browser#execute_script允许您将几乎任何东西从JavaScript直接返回到Ruby。

查看这些规格以获取示例: https://github.com/watir/watirspec/blob/master/browser_spec.rb#L225-L246

答案 1 :(得分:1)

如果你得到了脚本标签的html,你可以使用常规的Ruby字符串方法来解析它,找到你想要的值。

假设脚本标记是页面上的第一个,您可以使用以下命令获取脚本标记的html:

browser.script.html
#=> <script language=\"JavaScript\"><!--\ns.pageName=\"Outdoor : \"\ns.server=\"\"\ns.channel=\"\"\n//s.pageType=\"\"\ns.prop1=\"\"\ns.prop2=\"\"\ns.prop3=\"\"\ns.prop5=\"Department\"\n</script>

您可以使用正则表达式来查找值:

browser.script.html[/s.prop5="([^"]+)"/, 1]
#=> "Department"

由于可能有多个脚本标记,而脚本标记没有有用的标识符,因此您可能需要遍历脚本标记,直到找到该值:

script = browser.scripts.find { |script| script.html.include?('s.prop5') }
script.html[/s.prop5="([^"]+)"/, 1]
#=> "Department"

答案 2 :(得分:0)

您可以使用正则表达式执行此操作:

src = '<script language="JavaScript"><!--
       s.pageName="Outdoor : "
       s.server=""
       s.channel=""
       //s.pageType=""
       s.prop1=""
       s.prop2=""
       s.prop3=""
       s.prop5="Department"'

pattern = /s\.prop5\s*=\s*"([^"]*)"/

page_type = pattern.match(src)[1]

This page有很多关于在Ruby中使用regexp的好信息。你可以使用regexp在Ruby中做各种很棒的东西!