单击无法选择的字段名称使用 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 :
使用 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']"))));
参考
您可以在以下位置找到相关的详细讨论:
我试图点击一个完全不可点击的字段。我附上屏幕截图。
页面后面的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 elementToBeClickable()
and you can use either of the following
使用 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']"))));
参考
您可以在以下位置找到相关的详细讨论: