【发布时间】:2019-07-31 17:39:01
【问题描述】:
我正在使用黄瓜做自动化(我第一次做自动化)。 UI 在 iFrame 中并使用 ember。 (UI代码来自其他团队,因此UI上的任何更改均不适用)
我正在尝试查找文本字段并填写该字段(最后一块)。但是,我一直找不到元素。任何人都可以帮助建议任何方法来找到它?
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
【问题讨论】:
-
@Sers 也许我仍然不明白您删除cssselector 标签 的编辑目标,但您的回答仍然建议使用CssSelector。
-
@DebanjanB 由于标签限制,我将 css 选择器替换为 capybara,并且 capybara 更相关,但问题已解决。
-
@Sers 看看你的编辑是如何破坏帖子的。您删除了标签css-selectors 以添加标签capybara,但您没有删除webdriverwait。请在编辑过程中小心,否则 OP 将永远不会收到规范和有效的答案。
标签: ruby selenium xpath css-selectors capybara