WebElement未识别

时间:2016-08-05 08:55:42

标签: selenium-webdriver

我正在尝试识别元素,但无论我使用哪种搜索策略,它仍会抛出未找到的异常元素 我不确定是否是因为隐藏的javascript。 请帮我识别名称为QuotationIDText的元素

以下是代码

<table onmousedown="javascript:hide();" id="Table5" cellspacing="0" cellpadding="0"
                width="100%">
                <tr>
                    <td class="frmArea" style="WIDTH: 527px" width="527">
                        <table class="frmcontbl" id="Table6" cellspacing="0" cellpadding="0">
                            <tr>
                                <td style="WIDTH: 203px; HEIGHT: 28px">
                                    <span id="QuotationIDLabel" class="fieldheader" align="left">Quotation ID:</span><br>
                                    <input name="QuotationIDText" type="text" id="QuotationIDText" class="input wildcard" style="WIDTH: 195px" tabindex="1" maxlength="50" size="22" />

3 个答案:

答案 0 :(得分:0)

试试这个:

driver.findElement(By.xpath(".//*[@id='QuotationIDText']"));

答案 1 :(得分:0)

免责声明:您尚未提供指向网页的链接,也未提供您尝试过的代码,因此我只需要猜测它有什么问题。

首先,确定您的表是否未异步加载。

要测试它,请尝试在不使用JavaScript的情况下运行该页面。打开Chrome或您使用的任何浏览器,然后停用JavaScript。如果在没有JavaScript的情况下无法加载,请尝试使用Wait

如果没有JavaScript加载,请尝试复制XPath

要在Chrome上执行此操作,请右键单击所需的元素,然后单击“检查元素”。然后,右键单击所需的元素,转到“复制&gt; ”,然后选择“复制XPath ”。然后像@Vikrant的回答一样使用XPath。

答案 2 :(得分:0)

您应该提供有关您的问题的更多信息。 但如果您认为找不到元素是因为某些js代码运行不完整,您可以使用某种等待。

最准确的选择是使用类似的东西:

public void WaitForPageLoaded(IWebDriver webDriver)
{
   WebDriverWait wait = new WebDriverWait(webDriver, Timeout);
   wait.IgnoreExceptionTypes(typeof(WebDriverTimeoutException));
   wait.Until(JQueryIsLoaded());
   wait.Until(DomIsReady());
}

protected Func<IWebDriver, bool> JQueryIsLoaded()
   {
      return webDriver =>
      {
         try
         {
            return EvalScript<long>(webDriver, "return jQuery.active").Equals(0);
         }
         catch (Exception)
         {
            return true;
         }
    };
}

protected Func<IWebDriver, bool> DomIsReady()
{
   return webDriver => EvalScript<string>(webDriver, "return document.readyState").Equals("complete");
}

等待的简单方法:

WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromMilliseconds(5000));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return wait.Until(driver => searchContext.FindElement(selector));