- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
因为我的 B593 路由器有时会卡在产生大约 50% 数据包丢失的状态,所以我正在尝试编写一个程序让它自动重启,如果让我们说最后 100 次 ping 中有 30 次丢失。
我无法单击实际的重启按钮本身,它似乎是由某些 Javascript 加载的,但 watir 无法看到该按钮。在谷歌上搜索了很多,似乎我需要提供我目前正在尝试做的这个按钮的路径 - 但到目前为止运气不好。
如果有人能说明一些问题,那真的会让我和其他一些 B593 拥有者也很开心。
这是当我点击重启按钮上的“复制 XPath”时 google inspector 所说的内容。
//*[@id="btnReboot"]
这是重启按钮在框架源代码中的样子。
<button onclick="reboot()" id="btnReboot">
<script>document.write(gVarReboot);</script>Reboot
</button>
页面源码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>content</title>
<script language='javascript'>
var REFRESH_TIME = 60000;
var ssidIdx = 0;
var lanDevIndex = 0;
var dhcpOptRedio = 0;
var QoSCurInterface = '';
var DDNSProvider = '';
var ripIndex = "";
var previousPage = "";
var preAddDomain = "";
var editIndex = -1;
var editDomain = '';
var g_FWLevel = -1;
var g_LevelOptRedio = 0;
var g_oMenuTree = null;
var curUserType = "0";
var sptUserType = '0';
var sysUserType = '1';
var aplyLine = -1;
var Link = "/html/help/help_content.html#";
var x = parseInt(screen.width / 2);
var y = parseInt(screen.height / 2);
var g_url = '';
var g_firstmenu = 'Admin_0';
var g_secondmenu = 'Admin_0_0';
var g_thirdmenu = 'Admin_0_0_0';
var errStrStr = '';
var errIdCtrlStr = '';
var updateIncoming = 0;
var g_IsVpnCertsUploaded = 0;
var g_is_refresh = true;
var g_modifiedFlg = false;
var ipfiltertablelist = null;
var g_wlanBasicSetting = "1";
var g_expendUpgDiv = true;
var g_smsType='0';
var g_isFromPinPage = false;
function addTimer() {
setInterval("resetModifiedFlg();", REFRESH_TIME);
}
function resetModifiedFlg() {
try {
if (top.g_modifiedFlg) {
top.g_modifiedFlg = false;
top.frames["hiddenfrm"].location
.replace("/html/main/hidden.asp");
}
} catch (e) {
var forjslint = 0;
}
}
</script>
<script language="JavaScript">
</script>
<frameset rows='68,*,20' border='0' frameborder='no' framespacing='0'
onload="addTimer();">
<frameset cols='0,0,0,*' frameborder='0' border='0'>
<frame src='/html/main/refresh.asp' name='connfrm' id='connfrm'
frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0' noresize></frame>
<frame src='/html/main/hidden.asp' name='hiddenfrm'
id='hiddenfrm' frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0' noresize></frame>
<frame src='' name='helpfrm' id='helpfrm' frameborder='no'
border='0' scrolling='no' marginwidth='0'
marginheight='0' noresize></frame>
<frame src='/html/main/logo.asp' name='logofrm' id='logofrm'
frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0'></frame>
</frameset>
<frameset cols='200,*,0' frameborder='0' border='0'>
<frame src='/html/main/menu.asp' name='menufrm' id='listfrm'
frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0' noresize></frame>
<frame src='' name='contentfrm' id='contentfrm' frameborder='0'
border='0' scrolling='auto' marginwidth='0'
marginheight='16' noresize></frame>
<frame src='' name='uploadFrm' id='uploadFrm'
frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0' noresize></frame>
</frameset>
<frame src='/html/main/footer.html' name='footerfrm'
frameborder='no' border='0' scrolling='no'
marginwidth='0' marginheight='0' noresize></frame>
</frameset>
<noframes>
The information on the page makes use of frame technology. For best
results, use the new version of Browser.
</noframes>
</head>
</body>
</html>
框架源代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="/js/loadbyver.js?ver=V100R001C56SP052"></script>
<script type="text/javascript">
loadCss("/css/newcommon.css");
loadCss("/css/contentstyle.css");
loadCss("/lang/lang.css");
loadRes("/lang/reset.res");
loadJs("/js/util/base.js");
loadJs("/js/util.js");
loadJs("/js/tabinfo.js");
loadJs("/js/reset.js");
</script>
</head>
<body>
<div class="page_container"><div id="page_path" class="page_path"> </div>
<table cellspacing=0 cellpadding=0 class="layout_table">
<tr>
<td class="layout_top_gap">
</td>
</tr>
<tr>
<td>
</td>
<td class="layout_center_td">
<table cellspacing=0 cellpadding=0 class="layout_title_table" id="layoutPageTitleId">
<tr>
<td class="layout_title_td">
<script type="text/javascript">
document.write(gVarReset);
</script>
</td>
</tr>
</table>
<table class="page_all_table" cellspacing="0" cellpadding="0">
<tr class="page_all_tr">
<td class="page_td_gap_left"></td>
<td class="page_all_content_td" id="page_all_content_td">
<table cellspacing=0 cellpadding=0 class="page_top_discription" id="pageTopDiscriptionId" >
<tr>
<td id="pageTopDiscriptionTdId" class="page_op_iscription_td">
<script type="text/javascript">
document.write(gVarPageComment);
</script>
</td>
</tr>
</table>
<div class="module_container">
<table cellspacing="0" cellpadding="0" class="module_header">
<tr>
<td id="id_rebootTitle">
<div class="module_header_title">
<div class="module_header_title_bg_left"></div>
<div class="module_header_title_text"><script>
document.write(gVarReboot);
</script></div>
<div class="module_header_title_bg_right"></div>
</div>
</td>
</tr>
</table>
<table id="id_rebootBody" cellspacing="0" cellpadding="0"
class="module_content" >
<tr>
<td style="border:none" align="left">
<div style="margin-left:15px; margin-top : 15px;">
<script language="JavaScript" type="text/javascript">
document.write(gVarClickrebootb);
</script>
</div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" class="module_bottom">
<tr>
<td>
<div>
<button onclick="reboot()" id="btnReboot">
<script>document.write(gVarReboot);</script>
</button>
</div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" class="module_header">
<tr>
<td id="id_restoreTitle">
<div class="module_header_title">
<div class="module_header_title_bg_left"></div>
<div class="module_header_title_text">
<script>
document.write(gVarRestoreDefalut);
</script>
</div>
<div class="module_header_title_bg_right"></div>
</div>
</td>
</tr>
</table>
<table id="id_restoreBody" cellspacing="0" cellpadding="0"
class="module_content" >
<tr>
<td style="border:none" align="left">
<div style="margin-left:15px; margin-top : 15px;">
<script language="JavaScript" type="text/javascript">
document.write(gVarClickRestoreD);
</script>
</div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" class="module_bottom">
<tr>
<td>
<div>
<button onclick="restoreDefalut()" id="btnResory">
<script>document.write(gVarRestoreDefalut);</script>
</button>
</div>
</td>
</tr>
</table>
</div>
<div> </div>
<div id="erroinfo" style="width:100%; display:none"></div>
</td>
<td style="width:10px;"></td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" class="module_bottom">
<tr>
<td class="layout_left_corner">
</td>
<td>
</td>
<td class="layout_right_corner">
</td>
</tr>
</table>
</td>
<td class="layout_center_gap">
</td>
<td class="page_td_help_layout">
<div class="layout_help_top_div" id="id_layout_help_top_div"></div>
<div style=" padding:10px;">
<div id="page_all_help_td" ></div>
</div>
</td>
<td class="layout_right_gap">
</td>
</tr>
</table>
</div>
</body>
<script>
initPage();
__init();
</script>
</html>
我当前的代码
require "watir-webdriver"
admin_password = 'stackoverflowcanhelp'
#spawn instance
browser = Watir::Browser.new :chrome
#open homepage
browser.goto "http://192.168.0.75"
#set Langauge to english
browser.select_list(:name => 'Language').select 'English'
#enter password
browser.text_field(:name => "Password").set admin_password
#login
browser.a(:id, "btnLogin").click
#go to reboot menue
browser.cookies.add 'FirstMenu', 'Admin_10', :path => "/"
browser.cookies.add 'SecondMenu', 'Admin_10_1', :path => "/"
browser.cookies.add 'ThirdMenu', 'Admin_10_1_0', :path => "/"
#refresh browser
browser.refresh
#reboot router
browser.button(:xpath, '//*[id="btnReboot"]').click #does not work
browser.alert.set "Click "
browser.alert.ok
#close browser
browser.close
错误信息
gems/watir-webdriver-0.6.2/lib/watir-webdriver/elements/element.rb:490:in `assert_exists': unable to locate element, using {:xpath=>"//*[id=\"btnReboot\"]", :tag_name=>"button"} (Watir::Exception::UnknownObjectException)
from /Users/stackoverflowfan/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/watir-webdriver-0.6.2/lib/watir-webdriver/elements/element.rb:118:in `click'
from a.rb:29:in `<main>'
最佳答案
我找到了另一种方法,但仍然对 xpath 方法感兴趣。 :)
browser.frame(:id => "contentfrm").button(:id => "btnReboot").when_present.click
关于javascript - Ruby,Watir,无法单击由 Java 脚本加载的框架中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096892/
我需要开发一个简单的网站,我通常使用 bootstrap CSS 框架,但是我想使用 Gumbyn,它允许我使用 16 列而不是 12 列。 我想知道是否: 我可以轻松地改变绿色吗? 如何使用固定布局
这个问题在这里已经有了答案: 关闭 13 年前。 与直接编写 PHP 代码相比,使用 PHP 框架有哪些优点/缺点?
我开发了一个 Spring/JPA 应用程序:服务、存储库和域层即将完成。 唯一缺少的层是网络层。我正在考虑将 Playframework 2.0 用于 Web 层,但我不确定是否可以在我的 Play
我现有的 struts Web 应用程序具有单点登录功能。然后我将使用 spring 框架创建一个不同的 Web 应用程序。然后想要使用从 struts 应用程序登录的用户来链接新的 spring 应
我首先使用Spark框架和ORMLite处理网页上表单提交的数据,在提交中文字符时看到了unicode问题。我首先想到问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用utf8
我有一个使用 .Net 4.5 功能的模块,我们的应用程序也适用于 XP 用户。所以我正在考虑将这个 .net 4.5 依赖模块移动到单独的项目中。我怎样才能有一个解决方案,其中有两个项目针对不同的版
我知道这是一个非常笼统的问题,但我想我并不是真的在寻找明确的答案。作为 PHP 框架的新手,我很难理解它。 Javascript 框架,尤其是带有 UI 扩展的框架,似乎通过将 JS 代码与设计分开来
我需要收集一些关于现有 ORM 解决方案的信息。 请随意编写任何编程语言。 你能谈谈你用过的最好的 ORM 框架吗?为什么它比其他的更好? 最佳答案 我使用了 NHibernate 和 Entity
除了 Apple 的 SDK 之外,还有什么强大的 iPhone 框架可供开始开发?有没有可以加快开发时间的方法? 最佳答案 此类框架最大的是Three20 。 Facebook 和许多其他公司都使用
有人可以启发我使用 NodeJS 的 Web 框架吗?我最近开始从免费代码营学习express js,虽然一切进展顺利,但我对express到底是什么感到困惑。是全栈框架吗?纯粹是为了后端吗?我发现您
您可以推荐哪种 Ajax 框架/工具包来构建使用 struts 的 Web 应用程序的 GUI? 最佳答案 我会说你的 AJAX/javascript 库选择应该较少取决于你的后端是如何实现的,而更多
我有生成以下错误的 python 代码: objc[36554]: Class TKApplication is implemented in both /Library/Frameworks/Tk.
首先,很抱歉,如果我问的问题很明显,因为我没有编程背景,那我去吧: 我想运行一系列测试场景并在背景部分声明了几个变量(我打印它们以仔细检查它们是否已正确声明),第一个是整数,另外两个字符串为你可以看到
在我们承担的一个项目中,我们正在寻找一个视频捕获和录制库。我们的基础工作(基于 google 搜索)表明 vlc (libvlc)、ffmpeg (libavcodec) 和 gstreamer 是三
我试过没有运气的情况下寻找某种功能来杀死/中断Play中的正常工作!框架。 我想念什么吗?还是玩了!实际没有添加此功能? 最佳答案 Java stop类中没有像Thread方法那样的东西,由于种种原因
我们希望在我们的系统中保留所有重大事件的记录。例如,在数据库可能存储当前用户状态的地方,事件日志应记录对该状态的所有更改以及更改发生的时间。 事件记录工具应该尽可能接近于事件引发器的零开销,应该容纳结
那里有 ActionScript 2.0/3.0 的测试框架列表吗? 最佳答案 2010-05-18 更新 由于这篇文章有点旧,而且我刚刚收到了赞成票,因此可能值得提供一些更新的信息,这样人们就不会追
我有一个巨大的 numpy 数组列表(一维),它们是不同事件的时间序列。每个点都有一个标签,我想根据其标签对 numpy 数组进行窗口化。我的标签是 0、1 和 2。每个窗口都有一个固定的大小 M。
我是 Play 的新手!并编写了我的第一个应用程序。这个应用程序有一组它依赖的 URL,从 XML 响应中提取数据并返回有效的 URL。 此应用程序需要在不同的环境(Dev、Staging 和 Pro
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!