Я делаю автоматизацию с помощью огурца (я впервые делаю автоматизацию). Пользовательский интерфейс в iFrame и использует ember. (Код пользовательского интерфейса принадлежит другой команде, поэтому любые изменения пользовательского интерфейса не применяются)
Я пытаюсь найти текстовое поле и заполнить поле (последний кусок). Тем не менее, я продолжаю получать элемент не найден. Кто-нибудь может помочь предложить любой метод, чтобы найти его?
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"
Error
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