【问题标题】:Selenium not inputting the whole text into a text boxSelenium 没有将整个文本输入到文本框中
【发布时间】:2020-05-06 18:26:29
【问题描述】:

我正在使用 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);

请看截图。

我通过在城市、州、邮政编码和国家/地区后添加一个额外的空格来解决此问题,但我想知道是否有更好的解决方案。

【问题讨论】:

    标签: selenium selenium-webdriver salesforce-lightning


    【解决方案1】:

    你可以试试这个方法:

    只需调用它并添加 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);
        }
    

    等待元素

                    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;
        }
    

    【讨论】:

    • 单独输入字符可以工作,但它会停留在第一个文本框中。线程是否扰乱了流程?
    • 在调试模式下单步执行会发生什么?你的错误信息是什么?
    • 当我在调试模式下运行测试时,我返回 OpenQA.Selenium.ElementClickInterceptedException : element click intercepted: Element 在点 (698, 685) 不可点击。其他元素会收到点击:
    • 您可以尝试为点击添加偏移量,也可以尝试使用 javaclick。我在上面的答案中添加了一个 java 点击。元素的 xpath 是什么样的?
    • 你的意思是我应该在 TypeCharsIndividually 中调用 ClickJava 而不是 element.click 吗?
    【解决方案2】:

    这是一个 Salesforce 问题。即使我手动更新送货地址字段并选择另一个字段时,我也看到了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多