#c# #selenium #xpath #css-selectors #webdriverwait
#c# #selenium #xpath #css-селекторы #webdriverwait
Вопрос:
В принципе, я хочу отправить ключи к элементу ввода. Я пытался использовать SendKeys()
метод, но он не отправляет значение, которое я использовал, вместо этого он использует атрибут предыдущего значения поля ввода. Более того, использование SendKeys()
или using ExecuteScript()
methods не изменяет атрибут value элемента ввода. Ниже приведены фрагменты кода, которые я пробовал, но пока не сработали :
// Wait for zipcode input box
Utilities.WaitUntilElementIsPresent(driver, By.CssSelector("input#fad-dealer-searchbar-search-textbox"));
// click to go to the us site
var zipcodeInput = driver.FindElement(By.CssSelector("input#fad-dealer-searchbar-search-textbox"));
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
zipcodeInput.Clear();
zipcodeInput.Click();
//js.ExecuteScript("arguments[0].setAttribute('value', '11361')", zipcodeInput);
//js.ExecuteScript("document.getElementById('fad-dealer-searchbar-search-textbox').setAttribute('value', " zipcode ")");
//js.ExecuteScript("document.getElementById('fad-dealer-searchbar-search-textbox').value=11361");
//js.ExecuteScript("document.getElementById('fad-dealer-searchbar-search-textbox').innerHTML = 11361;");
zipcodeInput.SendKeys(zipcode);
zipcodeInput.Submit();
zipcodeInput.SendKeys(Keys.Enter);
Вот элемент ввода, в который мне нужно ввести текст :
<div class="sdp-form-text-box-text-box-container search-textbox">
<input type="number" autocomplete="off" value="00002" data-validation-state="success" aria-invalid="false" aria-required="true" class="sdp-form-text-box-text-box gcss-button-align-left" id="fad-dealer-searchbar-search-textbox" maxlength="5" name="searchTextBoxValue" pattern="d*" placeholder="Enter ZIP Code" required="" role="search">
</div>
Вот сайт, который я просматриваю, если вам, ребята, нужно проверить его Chrysler.
Я надеюсь, что я правильно объяснил свою проблему. Приветствуется любая помощь.
Комментарии:
1. После тестирования одного и того же кода на разных сайтах выяснилось, что это проблема, возникающая при веб-обходе через сайт Chrysler. Тем не менее, я все еще ищу способ выполнить эту задачу.
Ответ №1:
В функции «WaitUntilElementIsPresent» вам нужно проверить ожидаемые условия, применяемые в webdriver. Ниже приведен аналогичный код. Вы можете использовать «Elementsvisible» или «ElementToBeClickable».
public static IWebElement WaitUntilElementIsPresent(this IWebDriver driver,By elementLocator, int timeout = 10)
{
try
{
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout));
return wait.Until(ExpectedConditions.ElementIsVisible(elementLocator));
}
catch (NoSuchElementException)
{
Console.WriteLine("Element with locator: '" elementLocator "' was not found.");
throw;
}
}
Комментарии:
1. Спасибо за ответ, но это приведет только к появлению сообщения об исключении. Смотрите комментарии под ответом @DebanjanB
Ответ №2:
Для вызова SendKeys()
вам нужно вызвать WebDriverWait в сочетании с ожидаемыми условиями в качестве ElementToBeClickable, и вы можете использовать любое из следующих решений:
-
CssSelector
:var zipcodeInput = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("label.gcss-sr-only[for^='change-zip__input-field-']"))); zipcodeInput.Click(); zipcodeInput.Clear(); zipcodeInput.SendKeys(zipcode);
-
XPath
:var zipcodeInput = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//label[@class='gcss-sr-only' and starts-with(@for, 'change-zip__input-field-')]"))); zipcodeInput.Click(); zipcodeInput.Clear(); zipcodeInput.SendKeys(zipcode);
Примечание:
- Убедитесь, что почтовый индекс состоит только из чисел.
- Убедитесь, что максимальная длина почтового индекса составляет всего 5 цифр.
Комментарии:
1. Спасибо за ответ, но он не работает, потому что он выдает
OpenQA.Selenium.WebDriverTimeoutException: 'Timed out after 20 seconds'
. Однако методыzipcodeInput.Clear();
иzipcodeInput.Click();
ранее работали (забыл упомянуть об этом). Опять же, это условие не должно завершиться ошибкой, потому что над ним работали методыClear()
иClick()
.2. Тем не менее, он выдает
WebDriverTimeoutException
fromWebDriverWait
, поэтому он не достигнет приведенного ниже кода.3. @LordDraagon Проверьте мой обновленный ответ и сообщите мне о статусе
4. Выдается все то же исключение. Тем не менее, я использовал это ` js.ExecuteScript(«document.getElementById(‘fad-dealer-searchbar-search-textbox’).children[0].children[1].children[0]. значение = » почтовый индекс «»);` и пройден, чтобы выбрать поле ввода и задать значение. Теперь это изменяет значение, но когда я вызываю клавишу ввода, оно снова меняется на
00002