Как вызвать SendKeys () к элементу ввода через Selenium и C#

#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 from WebDriverWait , поэтому он не достигнет приведенного ниже кода.

3. @LordDraagon Проверьте мой обновленный ответ и сообщите мне о статусе

4. Выдается все то же исключение. Тем не менее, я использовал это ` js.ExecuteScript(«document.getElementById(‘fad-dealer-searchbar-search-textbox’).children[0].children[1].children[0]. значение = » почтовый индекс «»);` и пройден, чтобы выбрать поле ввода и задать значение. Теперь это изменяет значение, но когда я вызываю клавишу ввода, оно снова меняется на 00002