selenium 与.NET:无效元素状态:元素当前不可交互,因此可能无法操作

slsn1g29  于 2023-01-06  发布在  .NET
关注(0)|答案(4)|浏览(143)

我正在尝试从中读取值。下面是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();

我不知道该怎么修这个。请帮忙。谢谢

oaxa6hgo

oaxa6hgo1#

Selenium .NET库将select元素的操作 Package 到一个名为SelectElement的类中,您应该使用这个类,而不是您正在使用的方法。
因此,引用WebDriver.Support.dll,使用OpenQA.Selenium.Support.UI

using OpenQA.Selenium.Support.UI;

SelectElementIWebElement作为参数,因此您有责任 * 首先 * 找到select元素:

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

这个类上还有一个方便的方法,允许您通过selectvisibletext属性在该select中选择一个option

select.SelectByText("Agent");

类似地,你可以尝试找出当前选中的选项,SelectElement类也可以很容易地做到这一点:

IWebElement selectedOption = select.SelectedOption;

现在SelectedOption将是一个IWebElement,表示当前在select中选择的option,所以要获得它的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);
q3aa0525

q3aa05252#

在我的例子中,网页上有两个元素具有相同的ID,我使用find element by xpath而不是find element by id解决了这个问题。

dy2hfwbg

dy2hfwbg3#

如果仅Chrome浏览器出现此问题,请删除以下命令:

query_UserType.Clear();

我遇到了同样的问题与 chrome 和它是固定后,删除清除命令.
如果你真的想删除文本框中的文本,尝试使用机器人类或任何其他键盘模拟器,并按下“退格键”/“删除”按钮。

uujelgoq

uujelgoq4#

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

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

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

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

我将此输入文本Map如下:

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

我解决它只是改变句子的顺序,如bellow:

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

相关问题