Selenium with .NET:无效的元素状态:元素当前不可交互,可能无法操作

时间:2014-03-05 08:18:51

标签: .net selenium using

我正在尝试从中读取值。这是HTML代码:

<select name="user_type" id="user_type" class="select">
<option value="0">Select</option>
<option value="1"> Admin </option>
<option value="1"> Agent </option>
<option value="1"> Butler </option>
<option value="1"> Ops </option>
</select>

这是我在Selenium中使用.NET实现的代码:

query_UserType = driver.FindElement(By.Id("user_type"));
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
query_UserType.Clear();
query_UserType.Click();
query_UserType.SendKeys(" Agent ");
string str_myEle2 = query_UserType.GetAttribute("value");
Console.WriteLine("New User Type is: " + str_myEle2);

它给出错误“无效元素状态:元素当前不可交互,可能无法操作”在线:

query_UserType.Clear();

我不知道如何解决这个问题。请帮忙。感谢

4 个答案:

答案 0 :(得分:0)

Selenium .NET库将select元素的操作包装到名为SelectElement的类中。你应该使用它来代替你的方式。

所以引用WebDriver.Support.dll,为OpenQA.Selenium.Support.UI添加一个使用:

using OpenQA.Selenium.Support.UI;

SelectElement需要IWebElement作为参数,因此您有责任首先找到select元素

IWebElement query_UserType = driver.FindElement(By.Id("user_type"));
var select = new SelectElement(query_UserType);

此类上有一个方便的方法,允许您通过可见 option属性在select内选择text

select.SelectByText("Agent");

同样,您正在尝试找出当前选定的选项。 SelectElement类也可以轻松完成此任务:

IWebElement selectedOption = select.SelectedOption;

现在SelectedOptionIWebElement代表当前在option内选择的select。所以要获得它的text属性,它与其他元素没什么不同:

selectedOption.Text;

完全放在最后:

driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
IWebElement query_UserType = driver.FindElement(By.Id("user_type"));
var select = new SelectElement(query_UserType);
select.SelectByText("Agent");
IWebElement selectedOption = select.SelectedOption;
Console.WriteLine("Currently selected option is: {0}", selectedOption.Text);

答案 1 :(得分:0)

就我而言,网页上有2个具有相同ID的元素。我使用find element by xpath代替find element by id来解决了这个问题。

答案 2 :(得分:0)

如果仅在Chrome浏览器中显示此问题,请删除以下命令:

query_UserType.Clear();

我遇到了与Chrome相同的问题,并在删除清除命令后修复了该问题。

如果您确实要从文本框中删除文本,请尝试使用机器人类或任何其他键盘模拟器,然后按“退格”/“删除”按钮。

答案 3 :(得分:-1)

这个问题也发生在我身上。我遇到问题的代码片段是:

nameProject.clear();        
nameProject.click();

其中nameProject是输入文本,如下所示:

<input type="textbox" name="project" id="_pt_jobProperties_project">

我将此输入文本映射如下:

@FindBy(id = "_pt_jobProperties_project")
  private WebElement nameProject;

我解决了它只是改变了下面的句子的顺序:

nameProject.clear();        
nameProject.click();