我正在使用黄瓜进行自动化(这是我第一次进行自动化)。用户界面位于iFrame中,并使用余烬。 (用户界面代码来自另一个团队,因此,用户界面的任何更改均不适用)
我正在尝试查找文本字段并填写该字段(最后一块)。但是,我一直找不到元素。任何人都可以帮助建议找到它的任何方法吗?
HTML代码
<div id="payeePassportNumber" class="form-row-line">
<div id="ember866" class="rdc-component-base rdc-text-input rdc-text-input no-label label-top ember-view">
<div class="label-holder">
<label>Passport Number</label><!---->
</div>
<div class="component-holder">
<div class="component-wrapper textinput-wrapper">
<input type="text" placeholder="" maxlength="140" id="ember867" class="ember-text-field ember-view">
</div>
</div>
</div>
</div>
提问之前的Ruby代码
session.within_frame(session.find(:xpath, "//[@id='myframe']")) do
session.driver.browser.find_element(:id, 'payeeDetails').click
if payeeDetails == 'Passport Number'
session.find(:xpath,"//[text()[normalize-space()='#{payeeDetails}']]").click
session.driver.browser.find_element(:id, 'payeePassportCountry').click
session.find(:xpath,"//[text()[normalize-space()='#{country}']]").click
session.fill_in session.find(:xpath, "//[@id='payeePassportNumber']/div/div[2]/div[contains(@Class, 'component-wrapper textinput-wrapper')]"), :with => "123456"
错误
invalid selector: Unable to locate an element with the xpath expression //[@id='payeePassportNumber']///div/[contains(@Class, 'component-wrapper textinput-wrapper')] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//[@id='payeePassportNumber']///div/[contains(@Class, 'component-wrapper textinput-wrapper')]' is not a valid XPath expression.
(Selenium::WebDriver::Error::InvalidSelectorError)
问题后的Ruby代码已得到解决
session.within_frame('myframe') do
#find proxy type dropdown list & select proxy type
session.find('#payeeDetails').click
session.find("li", text: "#{payeeDetails}").click
if payeeDetails == 'Passport Number'
#find country dropdownlist & select country
session.find('#payeePassportCountry').click
session.find(:xpath,"//*[text()[normalize-space()='#
{country}']]").click
#fills in proxy ID
session.find('#payeePassportNumber').fill_in with: proxyID
end
end
答案 0 :(得分:0)
您的错误告诉您出了什么问题:
"//[@id='payeePassportNumber']/div/div[2]/div[contains(@Class, 'component-wrapper textinput-wrapper')]"
不是有效的XPath表达式。
我怀疑@Class被类名中的空格所混淆。尝试以下xpath:
"//div[@id='payeePassportNumber']/div/div[2]/div[contains(@class, 'component-wrapper') and contains(@class, 'textinput-wrapper')]"
有帮助吗?
答案 1 :(得分:0)
您不能将@Class
与大写C一起使用,并且您的选择器总体上是错误的。
尝试使用如下所示的简单选择器:
#payeePassportNumber input
//div[@id='payeePassportNumber']//input
答案 2 :(得分:0)
您的代码有很多错误:
.driver.browser
都可能做错了事。)fill_in
)的方法,没有看到您的代码所引用的所有HTML(#payeeDetails,您尝试使用normalize-space
xpaths单击的元素,等等),很难为您的代码提供完整的修复程序,但是最简单的方法是填写HTML中显示的输入字段(假设它位于ID为“ myframe”的iframe中)将类似于
session.within_frame('myframe') do
session.find('#payeePassportNumber').fill_in with: '123456'
end