单击无法选择的字段名称使用 Selenium

Clicking on a field name whose unselectable is on using Selenium

我试图点击一个完全不可点击的字段。我附上屏幕截图。

页面后面的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();

它抛出异常,说它无法找到该字段。

有人可以帮忙吗?

尝试使用 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')]")));

不可选择的属性

unSelectable 属性设置选择过程是否可以从元素的内容开始。 If the unSelectable attribute of an element is set to on, then the element is selectable only if the selection starts outside the contents of the element.

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 based, then to click on the element you need to induce for the elementToBeClickable() and you can use either of the following :

  • 使用 WebDriverWaitCssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("td.x-grid3-td-TRAVNAME > div.x-grid3-col-TRAVNAME"))).Click();
    
  • 使用 WebDriverWaitXPath:

    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();
    
  • 使用 IJavaScriptExecutorCssSelector:

    ((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']"))));
    

参考

您可以在以下位置找到相关的详细讨论: