【发布时间】:2021-02-23 14:06:45
【问题描述】:
我有一个应用程序,它曾经在 Selenium 框架中具有 JavaScript 等待功能。但是,这会导致 Angular9 出现无法解决的问题,必须将其移除以替换为更好的东西。
现在我正在努力解决 Selenium 100% 无法找到明显可见和可交互的元素的问题。当我单步执行代码时,在单击元素的行处中断,它工作正常。但即使使用 WebdriverWait,手动运行代码时也永远找不到。
标记:
<app-grafikk-radio>
<hb-felt>
<div translate="" class="hb-animation--appear hb-felt">
<legend class="hb-legend" data-e2e-selector="hva-sporsmaal">
<span translate="">Hva skal lånet/tilskuddet brukes til?</span>
<hb-hjelpetekst _nghost-ysl-c55="">
<div _ngcontent-ysl-c55="" class="hb-hjelpetekst">
<button _ngcontent-ysl-c55="" type="button" class="hb-hjelpetekst-knapp" title="Åpne hjelpetekst"">
<span _ngcontent-ysl-c55="">Åpne hjelpetekst</span><!----><!---->
<hb-ikon _ngcontent-ysl-c55="" nghost-ysl-c56="">
<span _ngcontent-ysl-c56="" class="hb-ikon hb-ikon-- >
<svg _ngcontent-ysl-c56="" focusable="false">
<use _ngcontent-ysl-c56="" xlink:href="images/sprite.symbol.svg#ikon-sporsmalstegn"></use>
</svg>
</span><!---->
</hb-ikon>
</button><!---->
</div></hb-hjelpetekst><!---->
</legend><!---->
<ul class="hb-liste hb-liste--minimal hb-liste--hva">
<li>
<input type="radio" class="hb-grafikkradio ng-untouched ng-pristine ng-invalid" id="hva-KJOPE" data-e2e-selector="hva-KJOPE">
<label class="hb-label" for="hva-KJOPE">Kjøpe bolig <span aria-hidden="true" class="hb-ikon hb-ikon--bolig-kjope">
<svg focusable="false">
<use xlink:href="/images/bolig-sprite.svg#ikon-bolig-kjope">
</use>
</svg>
</span>
</label>
</li>
<li>
...
Java/Selenium 代码:
@FindBy(id = "hva-KJOPE")
public WebElement kjopeBolig;
kjopeBolig.sendKeys(Keys.SPACE);
//kjopeBolig.click(); //sendKeys SPACE used because click() allmost always get the "ElementInterceptedError - other element would receive the click"
现在,如前所述,当单步执行 Java 代码并在 overtaBolig.sendKeys(Keys.SPACE); 行中断时,它可以正常工作。
但是正常运行的时候,结果是
org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{"method":"css selector","selector":"#hva-KJOPE"}
我尝试等待元素可点击,如下所示:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(kjopeBolig));
element.click();
但这也不起作用。它只是超时:
org.openqa.selenium.TimeoutException:预期条件失败:等待元素可点击:[[ChromeDriver:Linux 上的 chrome (5f31d37458a386bf0baea00a34aa3688)] -> id:hva-KJOPE](尝试 10 秒) 500 毫秒间隔)
有什么想法吗?我怀疑使用原始 JavaScript 等待方法是有原因的,但我能找到的人都不知道,代码已经有几年了。我可以尝试其他方法/技术吗?
编辑:经过更多测试,发现同一页面上的所有(单选)按钮都存在此问题。
【问题讨论】:
-
我在您发布的带有“hva-OVERTA”标识的 HTML 中没有看到元素。
-
它在 id="hva-KJOPE" 旁边 - 它只是没有包含在我上面的示例中 :-) 我现在更正了。
标签: java selenium webdriver webdriverwait