0

我正在尝试单击一个完全不可单击的字段。我附上屏幕截图。

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

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

有人可以帮忙吗?在此处输入图像描述

4

2 回答 2

1

尝试使用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')]")));
于 2016-08-03T20:54:57.217 回答
0

不可选择的属性

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-selectstyle 属性是继承的。这意味着unSelectable必须在所有不可选择元素上设置该属性,无论该unSelectable属性是否设置在不可选择元素的父元素上。


这个用例

相关的 HTML 将有助于构建规范的答案。但是,如果元素是动态元素或网站是基于Kendo UI的,则单击需要诱导WebDriverWait的元素elementToBeClickable(),您可以使用以下任一Locator Strategies

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

参考

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

于 2020-07-27T23:27:40.030 回答