我试图点击一个完全无法点击的字段。我附上了屏幕截图。
页面背后的Html代码是:
<td class="x-grid3-col x-grid3-cell x-grid3-td-TRAVNAME " style="width: 234px;" tabindex="0">
<div class="x-grid3-cell-inner x-grid3-col-TRAVNAME" unselectable="on">ARUNACHALAM/SHAN</div>
</td>
我编写的代码在C#中,如下所示:
Thread.Sleep(1000);
Driver.Instance.FindElement(By.XPath("//*[@id='ext - gen13']/div/table/tbody/tr/td[3]/div")).Click();
它抛出异常,说无法找到该字段。
答案 0 :(得分:0)
尝试使用WebDriverWait
,如下所示: -
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(20));
var el = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("td.grid3-td-TRAVNAME div.x-grid3-col-TRAVNAME")));
el.Click();
已修改:如果遗憾的是由于unselectable="on"
导致其无法点击,请在点击IJavascriptExecutor
之前删除此属性属性,如下所示: -
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(20));
var el = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("td.grid3-td-TRAVNAME div.x-grid3-col-TRAVNAME")));
IJavaScriptExecutor js = Driver.Instance as IJavaScriptExecutor;
el = (IWebElement)js.ExecuteScript("arguments[0].removeAttribute('unselectable'); return arguments[0];", el);
el.Click();
已修改: - cssSelector无效,请尝试使用By.Xpath()
,如下所示: -
var el = wait.Until(ExpectedConditions.ElementIsVisible(By.Xpath(".//div[contains(text(), 'ARUNACHALAM/SHAN')]")));
答案 1 :(得分:0)
unSelectable属性设置选择过程是否可以从元素的内容开始。如果一个元素的不可选择的属性被设置为on
,则元件是可选择仅当元素的内容以外的选择开始。
unSelectable
属性与-moz-user-select
和-webkit-user-select
样式属性之间的区别在于,-moz-user-select
和-webkit-user-select
样式属性指定元素是否可以在unSelectable
属性中被选择时,仅指定选择过程是否可以从元素的内容开始。另一个区别是unSelectable
和-moz-user-select
样式属性被继承时,-webkit-user-select
属性没有被继承。这意味着无论是否在不可选择元素的父元素上设置了unSelectable
属性,都必须在所有不可选择元素上设置unSelectable
属性。
相关的HTML将有助于构建规范的答案。但是,如果该元素是动态元素或网站基于Kendo UI,则要点击该元素,您需要为elementToBeClickable()
引入WebDriverWait,并且可以使用以下任一{ {3}}:
使用 WebDriverWait 和 CssSelector :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("td.x-grid3-td-TRAVNAME > div.x-grid3-col-TRAVNAME"))).Click();
使用 WebDriverWait 和 XPath :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//td[@class='x-grid3-col x-grid3-cell x-grid3-td-TRAVNAME ']/div[text()='ARUNACHALAM/SHAN']"))).Click();
使用 IJavaScriptExecutor 和 CssSelector :
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CssSelector, "td.x-grid3-td-TRAVNAME > div.x-grid3-col-TRAVNAME"))));
使用IJavaScriptExecutor和CssSelector
:
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='x-grid3-col x-grid3-cell x-grid3-td-TRAVNAME ']/div[text()='ARUNACHALAM/SHAN']"))));
您可以在以下位置找到有关事件的详细讨论: