当我用以下代码运行代码时:
link_element(:text, "#{user_name}").when_present.click
它给出了错误
TypeError: can't convert Symbol into Integer
(这里user_name是一个变量,它存储一个字符串,这是用户创建的带时间戳的运行时的名称)
当我用link(:text, "#{content_title}").when_present.click
运行我的代码时,它给出了
NoMethodError: undefined method 'link' for #<ClassName:0x3ded7a0>
这是页面的HTML:
<div class="univ_name">
<p class="major_name" title="Thorin Oakenshield 04/05/15">
<a href="/blabla/bla-bla-qwert-04-05-15-04-09-10-am">Thorin Oakenshield 04/05/15, 04:09:10 AM</a>
</p>
<div class="univ-info">
<div class="univ-meta-data">
</div>
我也尝试点击link(:text, "#{user_name}").parent.paragraph(:class, 'major_name').parent.div(:class, 'univ_name').when_present.click
,但没有帮助。
答案 0 :(得分:2)
<强>问题强>
您看到的行为是由于Watir和Page-Object API之间的差异。
第一个区别在于元素的动态定位:
link
查找嵌套元素。例如,browser.link(:text => "#{user_name}").click
link_element
来查找嵌套元素。例如,page.link_element(:text => "#{user_name}").click
由于link
仅在Watir中定义而不是Page-Object,因此页面对象将给出未定义的方法错误。
第二个区别是如何指定定位器:
browser.link(:text, "#{user_name}")
和browser.link(:text => "#{user_name}")
。browser.link(:text => "#{user_name}")
。由于使用两个参数而不是一个哈希调用link_element
,因此会发生错误。
<强>解决方案强>
您应该能够通过使用link_element
方法的哈希来解决您的问题:
link_element(:text => "#{user_name}").when_present.click
答案 1 :(得分:0)
不需要字符串插值,当我将'user_name'设置为来自给定html的链接文本时,下面的代码在本地适用于我:
user_name = "Thorin Oakenshield 04/05/15, 04:09:10 AM"
browser = Watir::Browser.new :chrome
browser.goto "http://127.0.0.1:1234/"
browser.link(:text, user_name).when_present.click