Ruby watir webdriver未找到或填写文本字段

Ruby watir webdriver未找到或填写文本字段,ruby,watir-webdriver,Ruby,Watir Webdriver,我正在开发一个watirwebserver的Ruby脚本,我让它首先用Ruby-Tk提示用户输入用户名和密码 在任何情况下,我都可以使用以下代码打开页面: b = Watir::Browser.start 'https://connect.mypage.com/Home' 之后,我称之为: t1=b.text_field(:id => 'ctl00_cphBody_txtUserName').when_present.set @entry1.textvariable <input

我正在开发一个watirwebserver的Ruby脚本,我让它首先用Ruby-Tk提示用户输入用户名和密码

在任何情况下,我都可以使用以下代码打开页面:

b = Watir::Browser.start 'https://connect.mypage.com/Home'
之后,我称之为:

t1=b.text_field(:id => 'ctl00_cphBody_txtUserName').when_present.set @entry1.textvariable
<input name="ctl00$cphBody$txtUsername" id="ctl00_cphBody_txtUsername" class="firstFocus" maxlength="50" type="text">
什么都没有填

我尝试过为ctl00_cphBody_txtUsername编码一个名称,但也没有成功

使用Firefox中的Inspector,字段构造如下:

t1=b.text_field(:id => 'ctl00_cphBody_txtUserName').when_present.set @entry1.textvariable
<input name="ctl00$cphBody$txtUsername" id="ctl00_cphBody_txtUsername" class="firstFocus" maxlength="50" type="text">
firstFocus的课程是:

<script type="text/javascript">
        $(document).ready(function () {
            jQuery('.firstFocus').focus();
        });
    </script>

如果我启动浏览器并按如下方式打开页面,我在查找这两个文本字段时没有问题:

browser =  Watir::Browser.new
browser.goto 'https://connect.mypage.com/Home'

#Then, the first item actually has a class, so I use that
t1=browser.text_field :class => 'firstFocus'
t1.set @entry1.textvariable

问题是定位器区分大小写

请注意,id属性值是ctl00_cphBody_txtsername,但使用的定位器是ctl00_cphBody_txtsername。由于N与N不匹配,因此从未找到元素,这就是when_present超时的原因

更正定位器中的id将解决此问题:

t1=b.text_field(:id => 'ctl00_cphBody_txtUsername').when_present.set @entry1.textvariable

a在加载页面之前,您是否尝试过类似“睡眠2”的方法?可能需要一两秒钟才能加载所有内容,而不是在加载页面时立即填充所有内容。当你在ajax密集型网站上不适合我的时候。另外,在执行.set之前,请尝试对元素执行.fire\u事件'focus'。我在b=Watir::Browser.start之后放置了一个Sleep60,没有填充任何内容,唯一的错误/异常是water webdriver超时。您是否尝试过像'focus'more do.set那样向它发送javascript?元素是在框架中还是在iframe中?