朋友。 我正在研究ruby使用watir测试登录网站AliExpress.com。我想在https://login.aliexpress.com自动填写表单,但遗憾的是我。该网站正在使用框架。 表单有html代码:
<div id="login-content" class="form clr">
<dl>
<dt class="fm-label">
<div class="fm-label-wrap clr">
<span id="login-id-label-extra" class="fm-label-extra"></span>
<label for="fm-login-id">Account:</label>
</div>
</dt>
<dd id="fm-login-id-wrap" class="fm-field">
<div class="fm-field-wrap">
<div id="account-check-loading" class="loading-mask">
<div class="loading-icon"></div>
<div class="loading-mask-body"></div>
</div>
<input id="fm-login-id" class="fm-text" autocapitalize="off" autocorrect="off" autocomplete="off" value="" placeholder="Email address or member ID" tabindex="1" name="loginId">
</div>
我的代码:(ruby 2.1.5-p273,IE11)
require 'watir'
b = Watir::Browser.new
b.goto "https://login.aliexpress.com"
b.div(id:"expressbuyerlogin", class:"iframe-show").exist? # => true
b.text_field(:name, "loginId").set "xxxxxxx@xxx.xx" # => Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_name=>["text", "password", "textarea"], :name=>"loginId"}
b.text_field(:name, "password").set "xxxxxxxxxxx" # => Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_name=>["text", "password", "textarea"], :name=>"password"}
有什么想法吗? 感谢。
答案 0 :(得分:0)
帧被视为单独的浏览器上下文,因此您必须指定您所在的帧。(对于嵌套的iframe,您需要指定每个帧,直到到达所需的上下文)。在这种情况下,您的代码应如下所示:
require 'watir'
b = Watir::Browser.new
b.goto "https://login.aliexpress.com"
b.iframe(id: 'alibaba-login-box').text_field(name: "loginId").set "xxxxxxx@xxx.xx"
b.iframe(id: 'alibaba-login-box').text_field(name: "password").set "xxxxxxxxxxx"
答案 1 :(得分:0)
请添加require'watir-webdriver' 另外,请确保使用最新的“watir-webdriver”版本和Watir版本为1.5.1.1145。