Как вызвать SendKeys () для элемента ввода через Selenium и C # - PullRequest
0 голосов
/ 12 марта 2019

По сути, я хочу отправить ключи на элемент ввода. Я попытался использовать метод SendKeys(), но он не отправляет значение, которое я использовал, вместо этого он использует предыдущий атрибут значения поля ввода. Более того, использование SendKeys() или использование ExecuteScript() методов не изменяет атрибут значения элемента ввода. Ниже приведены фрагменты кода, которые я пробовал и до сих пор не работал:

// 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 . Надеюсь, я правильно объяснил свою проблему. Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

В функции «WaitUntilElementIsPresent» необходимо проверить ожидаемые условия, применяемые на веб-драйвере. Ниже приведен аналогичный код. Вы можете использовать «ElementIsVisible» или «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 голос
/ 12 марта 2019

Чтобы вызвать 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 только цифры.
...