我有一个困扰自己的问题,我有一个方法可以查找并检查所有元素是否在页面上,该方法的一部分检查是否启用了页面元素。
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构建的,这些元素是有条件呈现的。
任何人对什么/将/可能导致此问题有任何想法,将不胜感激...
答案 0 :(得分:2)
根据Element.tagName
,tagName
接口的Element
只读属性返回被调用的元素的标签名称。例如,如果元素是<img>
,则其tagName
属性是"IMG"
(对于HTML文档;对于XML / XHTML文档,情况可能会有所不同)。
语法:
elementName = Element.tagName;
值:指示元素标签名称的字符串。该字符串的大写字母取决于文档类型:
tagName
元素上调用的<div>
返回"DIV"
。进一步,根据Document Object Model (Core) Level 1
:
请注意,与DOM的所有操作一样,这在XML中是保留大小写的。无论源HTML文档中的大小写如何,HTML DOM均以规范的大写形式返回HTML元素的tagName。
您已经提到代码是使用react 的代码段,因此在启用检查元素之前,请诱导 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
}
答案 1 :(得分:0)
我遇到了同样的问题,挖掘了一段时间后,我发现同一页面上还有其他甚至没有与之交互的元素都具有属性名=“ tagname”。在将其更改为tagname2的那一刻,我不再遇到此错误,并且能够与目标元素进行正确的交互。
令人惊讶的是,我遇到了Chrome 81.0.4044.20而不是80.x的问题