<a ng-if="leftNavParent.ChildNavigationLinks.length > 0" href="#!"
class="activeContent ng-binding ng-scope" ng-
click="leftNavCtrl.leftNavHeaderClicked(leftNavParent)">
ADMINISTRATIVE MODULE
</a>
我有一个Web元素,如上图所示。我发现它是
driver.findElement(By.linkText("ADMINISTRATIVE MODULE")).click();
这是在嵌套div元素中的左侧菜单栏中。我的问题是当我运行Selenium脚本时,它给了我一个例外
unknown error: Element <a ng-if="leftNavParent.ChildNavigationLinks.length > 0" href="#!"
class="activeContent ng-binding ng-scope" ng-click="leftNavCtrl.leftNavHeaderClicked(leftNavParent)">...
</a> is not clickable at point (99, 207). Other element would receive the click:
<div class="blockUI blockOverlay" style="z-index: 1000; border: none; margin: 0px; padding: 0px;
width: 100%; height: 100%; top: 0px; left: 0px; background-color: rgb(0, 0, 0); opacity: 0;
cursor: wait; position: fixed;"></div>
但是,当我以调试模式运行脚本时,它是单击该元素。任何想法,为什么还会发生这种情况
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"link text","selector":"ADMINISTRATIVE MODULE"}
使用以下代码代替睡眠或等待语句确定网页已完成加载:
public static void waitForPageToLoad() {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver wdriver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
});
}
update
在回答您的建议编辑时,您提出了一个其他问题,我将上述方法放在助手类中,然后将该类导入您的步骤类或页面对象。例如,就我而言,它是在具有一系列辅助对象的类中页面对象为我单击,除此之外,我调用页面对象本身内的waitforpagetoload,因此测试方法可能会说:
pageObject.clickLogonButton();
在您的情况下,似乎您将驱动程序对象传递给每个页面对象方法,因此请根据需要进行调整。然后在PageObject本身内,我可能有:
public void clickLogonButton() {
myHelper.waitForPageToLoad();
logonButton.click();
}
这清除了吗?
今天我阅读了有关简单页面对象的博客文章。
您使用哪个框架并不重要,但是我喜欢有隐式断言和等待的想法。
主要好处是您不必自己关心这些同步问题。
如果您喜欢使用普通的WebDriver API,则Bill的建议很好!