C# OpenQA.Selenium.WebDriverException:未知错误:a.tagName.toUpperCase不是通过Selenium和C包含reactJS元素的函数#
我有一个问题一直困扰着我,我有一个方法可以查找并检查所有元素是否都在一个页面上,该方法的一部分检查页面元素是否已启用C# OpenQA.Selenium.WebDriverException:未知错误:a.tagName.toUpperCase不是通过Selenium和C包含reactJS元素的函数#,c#,reactjs,selenium,selenium-webdriver,webdriverwait,C#,Reactjs,Selenium,Selenium Webdriver,Webdriverwait,我有一个问题一直困扰着我,我有一个方法可以查找并检查所有元素是否都在一个页面上,该方法的一部分检查页面元素是否已启用 if (Driver.Instance.FindElement(identifier).Enabled == false) { // do some stuff } 但是,If语句失败,出现以下错误: StackTrace:at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response
if (Driver.Instance.FindElement(identifier).Enabled == false)
{
// do some stuff
}
但是,If语句失败,出现以下错误:
StackTrace:at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebElement.get_Enabled()
...
OpenQA.Selenium.WebDriverException : unknown error: a.tagName.toUpperCase is not a function
(Session info: chrome=71.0.3578.98)
(Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 10.0.17134 x86_64)
该方法经常被调用,并在类似情况下与许多其他测试用例一起工作,没有问题,但是,当尝试与以下元素交互时,我得到上面显示的错误:
<div class="sc-gGBfsJ lhiRYE" span="5">
<svg aria-hidden="true" data-prefix="fas" data-icon="times" class="svg-inline--fa fa-times fa-w-11 sc-jnlKLf dmaYnw" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512" name="tag-create-modal__dismiss-cross">
<path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path>
</svg>
<div class="sc-hdPSEv kfkXT" id="CreateTagPropSheet__container" name="undefined__container">
<div class="sc-nrwXf egtFZS">
<div class="sc-fKGOjr bfXSai sc-ekkqgF dATqpE">
<h3 class="sc-cpHetk bdaBtw sc-crNyjn fXZflb" id="propertySheet__heading--undefined" name="propertySheet__heading--undefined">Create Tag</h3>
</div>
</div>
<form name="create-Tag__form">
<div class="sc-nrwXf egtFZS">
<div class="sc-fKGOjr bfXSai sc-ekkqgF dATqpE">
<div class="sc-hycgNl KoKFR"><label class="sc-jvEmr jErbdW sc-iBmynh kxfLCa">Tag Name</label></div>
<div class="sc-chAAoq GJbAH" id="propertySheet__select--tagNameContainer" name="tagNameContainer">
<div class="sc-dTLGrV dLLsoX"><input class="sc-ivVeuv fMqabh" color="normal" id="propertySheet__select--tagName" name="tagName" type="text" autocomplete="on" value=""></div>
</div>
</div>
</div>
<div class="sc-nrwXf egtFZS">
<div class="sc-fKGOjr bfXSai sc-ekkqgF dATqpE">
<div class="sc-hycgNl KoKFR"><label class="sc-jvEmr jErbdW sc-iBmynh kxfLCa">System Level Tag</label></div>
<div class="sc-chPdSV Ekqp" id="isSystemLevelCheckContainer" name="isSystemLevelTagContainer">
<input class="sc-kgoBCf fZucFc" type="checkbox" id="isSystemLevelCheck" name="isSystemLevelTag">
<div class="sc-kGXeez clAVjW"></div>
</div>
</div>
</div>
<div class="sc-nrwXf egtFZS">
<div class="sc-fKGOjr bfXSai sc-ekkqgF dATqpE"><button class="sc-bhlBdH gEVPJV" id="propertySheet__button--create-tag__Button" name="create-tag__Button" color="success">Create Tag</button></div>
</div>
</form>
</div>
</div>
创建标签
标签名
系统级标签
创建标签
我想知道它是否与元素本身有关,上面的代码是使用react构建的网站的一个片段,其中这些元素是有条件呈现的
是否有人对引起此问题的原因有任何想法,我们将不胜感激……Element.tagName
根据元素的标记名只读属性,接口返回调用该元素的元素的标记名。例如,如果元素是一个
,则其标记名
属性是“IMG”
(对于HTML文档;对于XML/XHTML文档,其大小写可能不同)
- 语法:
elementName = Element.tagName;
- Value:一个字符串,指示元素的标记名。此字符串的大小写取决于文档类型:
- 对于表示HTML文档的DOM树,返回的标记名始终采用规范的大写形式。例如,对
元素调用的标记名返回“DIV”
- XML DOM树中元素的标记名返回的情况与它们写入原始XML文件的情况相同。如果XML文档包含标记“”,则标记名属性的值为“SomeTag”
此外,根据:
注意,这在XML中是保留大小写的,DOM的所有操作也是如此。HTML DOM以规范大写形式返回HTML元素的标记名,而不考虑源HTML文档中的大小写
解决方案
正如您所提到的,代码是一个使用react so的片段,在检查元素是否已启用之前,请按如下所示导入WebDriverWait以查看所需元素的可见性:
if (Driver.Instance.FindElement(identifier).Enabled == false)
if (new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.XPath("element_xpath"))).Enabled == false)
{
// do some stuff
}
元素标记名
根据元素的标记名只读属性,接口返回调用该元素的元素的标记名。例如,如果元素是一个
,则其标记名
属性是“IMG”
(对于HTML文档;对于XML/XHTML文档,其大小写可能不同)
- 语法:
elementName = Element.tagName;
- Value:一个字符串,指示元素的标记名。此字符串的大小写取决于文档类型:
- 对于表示HTML文档的DOM树,返回的标记名始终采用规范的大写形式。例如,对
元素调用的标记名返回“DIV”
- XML DOM树中元素的标记名返回的情况与它们写入原始XML文件的情况相同。如果XML文档包含标记“”,则标记名属性的值为“SomeTag”
此外,根据:
注意,这在XML中是保留大小写的,DOM的所有操作也是如此。HTML DOM以规范大写形式返回HTML元素的标记名,而不考虑源HTML文档中的大小写
解决方案
正如您所提到的,代码是一个使用react so的片段,在检查元素是否已启用之前,请按如下所示导入WebDriverWait以查看所需元素的可见性:
if (Driver.Instance.FindElement(identifier).Enabled == false)
if (new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.XPath("element_xpath"))).Enabled == false)
{
// do some stuff
}
我也有同样的问题,在挖掘了一段时间后,我注意到同一页上还有一些其他元素,我甚至没有与had attribute name=“tagname”进行交互。当我将它更改为tagname2时,我不再有这个错误,并且我能够正确地与目标元素交互
令人惊讶的是,我在Chrome 81.0.4044.20上遇到了这个问题,而在80.x上没有遇到这个问题。我也遇到了同样的问题,在挖掘了一段时间后,我注意到在同一页面上还有一些其他元素,我甚至没有与had attribute name=“tagname”交互。当我将它更改为tagname2时,我不再有这个错误,并且我能够正确地与目标元素交互
令人惊讶的是,我在Chrome 81.0.4044.20上遇到了这个问题,而在80.x上没有遇到这个问题定位器使用了什么?i、 identifier?所以这个方法被调用了很多次,我通常通过一个函数来检查一个交互元素,例如name=“tagName”。我保存了一个包含我感兴趣的许多页面元素的私有静态库——它们遵循这个原则——私有静态按标记名文本字段=By.Name(“标记名”);——-这些只是在方法之间传递,例如-----------public static Boolean FindElement(按标识符)定位器使用了什么?i、 identifier?所以这个方法被调用了很多次,我通常通过一个函数来检查一个交互元素,例如name=“tagName”。我保存了一个包含我感兴趣的许多页面元素的私有静态库——它们遵循这个原则——私有静态按标记名文本字段=By.Name(“标记名”);——-这些只是在方法之间传递,例如-----------public static Boolean FindElement(按标识符)感谢您的深入解释,它非常有用-但是正如我提到的,这是一个片段,我忽略了检查元素是否在页面上。为糟糕的清晰度道歉