我正在尝试从中读取值。这是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();
我不知道如何解决这个问题。请帮忙。感谢
答案 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;
现在SelectedOption
将IWebElement
代表当前在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();