我正在尝试识别元素,但无论我使用哪种搜索策略,它仍会抛出未找到的异常元素 我不确定是否是因为隐藏的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" />
答案 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));