我是Watir和Cucumber的新手,我正在尝试运行自动化来创建Live ID。下面是我要点击的链接的HTML,“新”文本是它在网页上显示的内容。它会引导我将表单添加到我的Live帐户。
<ul class="c_cc" role="presentation" styple="overflow:visible;">
<li class="c_sm c_mcp" id = "new">
<a id href="#" class="c_nobdr t_prs">
<span class="is_c" dir="ltr" style="padding-right: 5px;">
<img class="is_img" src="https://p.pfx.ms/is/invis.gif" onload="this.onload=null;$Do.when('$IS.Init',0,this);" style="width:26px;height:26px;background-position:-1px -1px;background-image:url('https://p.pfx.ms/h/command4.png');" alt="New contact" title />
</span>
"New"
</a>
<span class="c_ms"></span>
</li>
</ul>
我写的watir代码单击“新建”如下:
@browser.div(:id, "c_header").div(:id, "c_cb0").ul(:class, "c_cc").span(:text, "is_c").when_present.click
我收到此错误:
Watir::Wait::TimeoutError: timed out after 30 seconds, waiting for {:id=>"is_c", :tag_name=>"span"} to become present
然后我尝试了以下代码:
@browser.div(:id, "c_header").div(:id, "c_cb0").ul(:class, "c_cc").span(:text, "New").when_present.click
但是这段代码并没有真正点击“新建”链接,因此下一个表单不会显示,其余代码无法运行。有谁知道这个问题的任何解决方案?
我发现弹出了一个新窗口,因此无法在旧窗口中找到该元素。谢谢大家的帮助。
答案 0 :(得分:0)
在第一个watir代码段中,:text
定位器用于.span
方法而不是:class
定位器。例如:
browser.ul(:class, "c_cc").span(:text, "is_c").exists? #=> false
browser.ul(:class, "c_cc").span(:class, "is_c").exists? #=> true
在第二个watir代码段中,:text
方法正在使用值为"New"
的{{1}}定位器。.span
方法。在这种情况下,应使用.link
方法。此外,该字符串包含双引号,因此如果括在另一组双引号中(或用单引号括起来),则必须对双引号进行转义。例如:
browser.ul(:class, "c_cc").span(:text, "New").exists? #=> false
browser.ul(:class, "c_cc").span(:text, "\"New\"").exists? #=> false
browser.ul(:class, "c_cc").link(:text, "\"New\"").exists? #=> true
browser.ul(:class, "c_cc").link(:text, '"New"').exists? #=> true
因此,以下示例之一应该有效:
browser.link(:text, "\"New\"").when_present.click
browser.link(:text, '"New"').when_present.click
browser.link(:class, "c_nobdr t_prs").when_present.click
答案 1 :(得分:0)
哇。这是旧的,并且我遇到了相同的行为。首先,这是在黄瓜步骤定义中。以下代码在开放的Ruby代码中可以完美地工作。它只是拒绝充当一个步骤。
它将在表中找到链接并单击它。点击不起作用。
not-encrypted
Ruby 2.4 瓦蒂尔(6.16.5) regexp_parser(〜> 1.2) selenium-webdriver(〜> 3.6)