TestInChrome1引发异常-“ OpenQA.Selenium.ElementNotInteractableException:元素不可交互”但是,当在TestInChrome2中使用JavaScriptExecutor时,它运行良好。
我的问题是:
为什么Click()方法在TestInChrome1中不起作用?
我们如何确定JavaScriptExecutor是必需的而没有反复试验?
[TestMethod]
public void TestInChrome1()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://ultimateqa.com/");
IWebElement element = driver.FindElement(By.TagName("title"));
element.Click();
driver.Quit();
}
[TestMethod]
public void TestInChrome2()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://ultimateqa.com/");
IWebElement element = driver.FindElement(By.TagName("title"));
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
driver.Quit();
}
答案 0 :(得分:0)
当我们使用硒时,它的编写方法会尝试模拟用户与网页的交互方式。
因此,让我们假设屏幕上有一个按钮,但它永远不会显示在屏幕的可见区域。也许它是不可滚动的(或者也许总是被隐藏),并且永远不会对用户可用。现在,这是一个有效的错误。
就我而言,在大多数误报(无效,非错误)的情况下,我遇到了元素不可交互的异常
如果由于元素不可交互而看到太多问题,只需捕获此异常,请截取屏幕截图以供参考,并在日志中为自己生成警告,然后可以在catch块中使用javascript执行程序来实现直接单击。 通过为自己生成警告,您可以检查自己是否没有错过实际问题。
希望这会有所帮助。
答案 1 :(得分:0)
在所有HTML文档中,<title>
标签都是必需的,它定义了文档的标题。元素:
注释A :HTML文档中不能有多个元素。
注释B :如果省略
<title>
标记,则文档将不会验证为HTML。
如果您观察任何网站的HTML DOM,例如https://ultimateqa.com/,您将看到<title>
驻留在<head>
内。因此,此标签的信息是可见和可读,但不是可交互的。
因此,根据上面的讨论,在TestInChrome1()
中:
Click()
。要提取 title ,您可以使用Title界面中的IWebDriver属性,还可以使用以下解决方案:
Console.WriteLine(driver.Title);
现在,您必须知道Selenium除了允许用户模拟最终用户执行的常见活动,在字段中输入文本,选择下拉值和复选框以及单击文档中的链接之外,还需要注意ExecuteScript()
提供了许多其他控件,例如任意JavaScript执行。要提取<title>
,可以按如下所示从IJavaScriptExecutor界面使用https://aws.amazon.com/blogs/developer/dynamodb-table-cache/方法:
Console.WriteLine((string)((IJavaScriptExecutor)driver).ExecuteScript("return document.title"));