Selenium не вводит весь текст в текстовое поле - PullRequest
0 голосов
/ 06 мая 2020

Я использую Selenium для очистки существующих полей адреса доставки объекта учетной записи Salesforce и для назначения новых значений. Я кодирую C# и использую Visual Studio 2019.

Я получаю случаи, когда текстовые поля не заполняются полностью.

Мой код ниже.

private string shippingStreet = "56789 Liberty Street";     // 80 character limit
private string shippingCity = "Toronto";                    // 40 character limit
private string shippingState = "ON";                        // 80 character limit
private string shippingZip = "87654";                       // 20 character limit
private string shippingCountry = "Canada";                  // 80 character limit


 IWebElement shStreet = driver.FindElement(By.XPath("//textarea[@placeholder='Shipping Street']"));
 shStreet.Clear();
 shStreet.SendKeys(shippingStreet); 
              
 IWebElement shCity = driver.FindElement(By.XPath("//input[@placeholder='Shipping City']"));
 shCity.Clear();
 shCity.SendKeys(shippingCity);
              
IWebElement shState = driver.FindElement(By.XPath("//input[@placeholder='Shipping State/Province']"));
shState.Clear();
shState.SendKeys(shippingState);
              
IWebElement shZip = driver.FindElement(By.XPath("//input[@placeholder='Shipping Zip/Postal Code']"));
shZip.Clear();
shZip.SendKeys(shippingZip);
              
IWebElement shCountry = driver.FindElement(By.XPath("//input[@placeholder='Shipping Country']"));
shCountry.Clear();
shCountry.SendKeys(shippingCountry);

Смотрите скриншот.

введите описание изображения здесь

Я исправляю эту проблему, добавляя лишний пробел после города, штата, почтового индекса и страны, но мне было интересно, есть ли лучшее решение.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Это проблема Salesforce. Я вижу проблему, даже когда вручную обновляю поле адреса доставки и перехожу в другое поле.

0 голосов
/ 06 мая 2020

Вы можете попробовать этот метод:

Просто вызовите его и добавьте xpath: WaitForElementDisplayed_byXPathTime ("// myPath");

    WaitForElementDisplayed_byXPathTime

    public static void WaitForElementDisplayed_byXPathTime(string value)
    {
            var wait = new WebDriverWait(Driver, new TimeSpan(0, 0, 30));
            wait.Until(webDriver => webDriver.FindElement(By.XPath(value)).Displayed);

    }

Еще одна вещь, которую я сделал, - это создание метода нового типа для отдельных символов, как на мобильных устройствах. Это просто немного замедляет его.

    public static void TypeCharsIndividually(IWebElement element, string expectedValue)
    {
        //use your code for element displayed and element enabled      
        element.Click();
        element.Clear();
        foreach (char c in expectedValue)
        {
            element.SendKeys(c.ToString());
            Thread.Sleep(100);
        }
    }

java щелкните

        public static void ClickJava(IWebElement element)
    {
        IJavaScriptExecutor executor = driver IJavaScriptExecutor;
        executor.ExecuteScript("arguments[0].click();", element);
    }

WaitForElement

                public static bool WaitForElementDisplayed_byXPath(string path)
    {
        var result = true;
        try { _wait.Until(webDriver => driver.FindElement(By.XPath(path)).Displayed); }
        catch (StaleElementReferenceException) { WaitForElementDisplayed_byXPath(path); }
        catch (NoSuchElementException) { WaitForElementDisplayed_byXPath(path); }
        catch (WebDriverTimeoutException) { result = false; }
        return result;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...