错误的参数数量(1为0)(ArgumentError)

问题描述:

我正在尝试查找是否在使用Watir的页面的表中的文本。错误的参数数量(1为0)(ArgumentError)

零件表:

<td class="left"><a class="xoName" name="Basket Case" href="View.aspx?contactID=2D67AD97-7486-4DB9-AB83-A2C76B116618">Basket Case</a> 
</td> 
<td class="left" onclick="parent.location='View.aspx?contactID=2D67AD97-7486-4DB9-AB83- A2C76B116618'">[email protected]</td> 

这里是我使用的代码:

if b1.text(:xpath =>'/html/body/form/div[2]/div/div[3]/div[4]/table/tbody/tr[2]/td[2]/a').include?(@fullName) 
    puts " Test Passed. Found the contact: " + @fullName + ". Actual Results match Expected Results." 
else 
    puts " Test Failed! Could not find contact: " + @fullName 
end 

和我得到的错误信息:

C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.4/lib/watir-webdriver/browser.rb:94:in `text': wrong number of arguments (1 for 0) (ArgumentError) 
    from C:/Ruby192/scripts/watir/highrise-welli.rb:71:in `<main>' 

任何帮助赞赏

+0

嗯我解决这个问题时遇到了问题:“我正在尝试查找是否使用Watir的页面表中的文本。”了解你想要做什么..你试图找到文字是什么?存在? –

+0

'highrise-welli.rb:71'是? –

+0

这样长的xpath总是一个坏主意:'/ html/body/form/div [2]/div/div [3]/div [4]/table/tbody/tr [2]/td [2]/a ' –

我通常尽我所能避免使用xpath,因为它很慢会产生难以读取的代码,并且正确地获取路径是棘手的。

考虑创建一个正则表达式并使用它来指定您正在查找的元素以及.exists方法。这假定您知道如何识别您正在搜索的表格,并且文本包含在表格中的单个单元格中。

targettext = Regexp.new(@fullName) 
if browser.table(:how, 'what').cell(:text, targettext).exists? 
    puts 'success message' 
else 
    puts 'fail message' 
end 

如果你没有在@fullname阅读,它可以被硬编码,那么你可以跳过某个步骤,只需指定内嵌

if browser.table(:how, 'what').cell(:text, /textyouaresearchingfor/).exists? 
+0

对于它的价值,我完全同意Jason的建议,即使用Rspec或黄瓜,他们的方法作为断言给定条件的手段存在。我没有理解这一点,因为看起来你已经在如何识别元素方面遇到了足够的麻烦,而且“一次只能处理一件事”。 –

对于这个例子/错误对,文本方法呢不要冒险。

in `text': wrong number of arguments (1 for 0) (ArgumentError) 

只要它说“参数”,看看你使用的方法。

此外,使用rspec gem,意味着写更少的代码。然后你可以做到这一点(见下文)而不是滚动你自己的错误处理。

targettext = Regexp.new(@fullName) 
browser.table(:how, 'what').cell(:text, targettext).exists?.should == true 

现在你只有两行代码。