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

时间:2016-08-03 18:43:51

标签: c# 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();

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

有人可以帮忙吗?enter image description here

2 个答案:

答案 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属性

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

参考

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