单击表格单元格时出现C#Selenium Webdriver错误

时间:2017-06-15 12:57:45

标签: c# selenium selenium-webdriver automation automated-tests

您好,我在编写自动化测试时遇到了一些问题。令人沮丧,因为它似乎在我单步执行代码时工作,但不是当我让它在调试中运行时。我对硒很新,所以欢迎任何建议。

这是我正在看的网格/表格。 Grid

这是表体的HTML。

<tbody>
  <tr data-id="471892">
    <td class="checkbox"><span class="checkbox" data-id="471892"></span></td>
    <td class="left" data-edit="false"><a href="/Contacts/Contact/471892">Contact1, Test</a></td>
    <td class="left" data-edit="false"><a href="/Contacts/Account/258144">Dan Test 1</a></td>
    <td class="left" data-edit="true" data-editid="280122">Automation Tester</td>
    <td class="left" data-edit="true"></td>
    <td class="left" data-edit="true">1234567890</td>
    <td class="left" data-edit="true">07123456789</td>
    <td class="left" data-edit="true" data-fieldid="324" data-dataid="64345" data-filtertype="10">Sherratt, Rachel
      <a class="icon edit" id="grid-edit" style="display: none;"></a>
    </td>
  </tr>
</tbody>

麻烦的是,开发人员为每个单元格添加了一个编辑图标,根据您将鼠标悬停在哪个单元格上移动。因此元素并不总是存在和无论我尝试什么它似乎都不起作用。

这是我的方法。

    public void gridEditText(IJavaScriptExecutor jse, string text, int cell) {
        WebDriverWait wait = new WebDriverWait(Browser.getDriver, new TimeSpan(0, 0, 15));
        IWebElement clickableElement = wait.Until(Browser.ElementIsClickable(By.XPath("//*[@id='grid-main']/tbody/tr[1]/td[" + cell + "]")));
        jse.ExecuteScript("arguments[0].scrollIntoView()", clickableElement);
        clickableElement.Click();
        //Grid Edit only appears when the mouse hovers over the cell
        IWebElement elem = wait.Until(Browser.ElementIsClickable(By.XPath("//*[@id='grid-main']/tbody/tr[1]/td[" + cell + "]/a[@id='grid-edit']")));
        String js = "arguments[0].style.display='inline';";
        jse.ExecuteScript(js, elem);
        elem.Click();

        IWebElement gridEditText = wait.Until(Browser.ElementIsClickable(By.XPath("//*[@id='grid-main']/tbody/tr[1]/td[" + cell + "]/input[@id='grid-edit-text']")));
        gridEditText.Clear();

        IWebElement gridEditText2 = wait.Until(Browser.ElementIsClickable(By.XPath("//*[@id='grid-main']/tbody/tr[1]/td[" + cell + "]/input[@id='grid-edit-text']")));
        gridEditText2.SendKeys(text);
    }

有什么想法吗? 这是一个错误

    An exception of type 'System.InvalidOperationException' occurred in WebDriver.dll but was not handled in user code

    Additional information: unknown error: Element <a class="icon edit" id="grid-edit" style="display: inline;"></a> is not clickable at point (1096, 296). Other element would receive the click:" <div class="overlay"></div>

1 个答案:

答案 0 :(得分:0)

异常说有另一个元素(在顶部?)会收到click事件。而不是使用Selenium .Click(),而是使用JavaScript .click():

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", element);