我将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);
}
答案 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;
}
}
答案 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)
根据您分享的HTML
,WebElement
明显具有onClick()
属性,因此 Java click()
应该有效。但我们不确定WebElement
是否在表单内,以保证submit()
方法有效。
要click()
作为value
的按钮上的Input Text
,您可以尝试以下代码行:
driver.FindElement(By.XPath("//div[@class='surveyBtn']/input[@id='inputSubmit']")).Click();