C#+ Selenium:点击提交

时间:2018-01-22 17:34:21

标签: c# selenium xpath

我将C#与Selenium一起使用并测试目前在Chrome上运行的应用程序,但希望扩展所有浏览器。所以我在下面尝试了几个代码,他们没有处理点击操作。我使用XPath,但它抛出一个异常,表示在表单中找不到元素。我不会在表格上提交。我也使用其他正常方式,但它没有提交任何内容:

    <div id="textAreaSection">
        <div class="textArea">
            <label><b>TextArea:</b></label><br>
            <textarea id="textAreaText" rows="14" cols="40"></textarea>
        </div>
        <div class="surveyBtn">
            <input id="inputSubmit" onClick="inputText()" type="submit" value="Input Text">
        </div>
   </div>

我试试这个,但在执行完之后没有点击或提交任何内容:

IWebElement tagElement = driver.FindElement(By.Id("inputSubmit"));
tagElement.Submit();

我尝试使用XPath,但抛出异常,说它找不到表单中的元素:

driver.FindElement(By.XPath("//input[@id='inputSubmit']")).Submit();

更新:1

我尝试使用LoflinA建议的WebDriverWait,但仍然抛出一个关于点(387,590)无法点击的异常。另一个元素将收到点击:

public void WaitUntilClickable(IWebElement elementLocator, int timeout)
{
    try
    {
        WebDriverWait waitForElement = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
        waitForElement.Until(ExpectedConditions.ElementToBeClickable(elementLocator));
    }
    catch (NoSuchElementException)
    {
        Console.WriteLine("Element with locator: '" + elementLocator + "' was not found in current context page.");
        throw;
    }
}

这是调用者块:

    IWebElement tag = driver.FindElement(By.XPath("//div[@class='surveyBtn']/input[@id='inputSubmit']"));

    WaitUntilClickable(tag, 10);

    tag.Click();

更新:2 感谢@ chris-crush-code代码以下代码!

 public void CallSubmitType(IWebElement tag, IWebDriver driver)
    {
        IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
        string script = tag.GetAttribute("onClick");
        js.ExecuteScript(script);
    }

    [Then(@"SpecFlowTesting")]
    public void SpecFlowTesting(string expectedStr)
    {                        
        IWebElement tag = driver.FindElement(By.Id("inputSubmit"));
        CallSubmitType(tag, driver);

        IWebElement tagTextArea = webDriver.FindElement(By.Id("textAreaText"));
        string txt = tagTextArea.GetAttribute("value");
        Assert.AreEqual(expectedStr, txt);
    }

3 个答案:

答案 0 :(得分:1)

正如您所说,收到详细说明另一个元素会收到点击的错误,我认为您的页面在尝试操作之前没有完全加载。请尝试以下操作以等待元素可点击:

    // Wait Until Object is Clickable
    public static void WaitUntilClickable(IWebElement elementLocator, int timeout)
    {
        try
        {
            WebDriverWait waitForElement = new WebDriverWait(DriverUtil.driver, TimeSpan.FromSeconds(10));
            waitForElement.Until(ExpectedConditions.ElementToBeClickable(elementLocator));
        }
        catch (NoSuchElementException)
        {
            Console.WriteLine("Element with locator: '" + elementLocator + "' was not found in current context page.");
            throw;
        }
    }

另见:Selenium Web Driver & Java. Element is not clickable at point (36, 72). Other element would receive the click:

答案 1 :(得分:1)

最新的chrome更新要求您滚动到可点击的对象。所以:

var js = (IJavascriptExecutor)driver;
IWebElement obj = driver.FindElement(By.XPath("//input[@id='inputSubmit']"));
js.ExecuteScript("arguments[0].scrollIntoView(true);", obj);

obj.Click();

答案 2 :(得分:0)

根据您分享的HTMLWebElement明显具有onClick()属性,因此 Java click()应该有效。但我们不确定WebElement是否在表单内,以保证submit()方法有效。

click()作为value的按钮上的Input Text,您可以尝试以下代码行:

driver.FindElement(By.XPath("//div[@class='surveyBtn']/input[@id='inputSubmit']")).Click();