我是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"
答案 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中做各种很棒的东西!