Selenium webdriver findElement(By.linkText)在脚本中不起作用。但当我在调试模式下运行时,它就起作用了

Selenium webdriver findElement(By.linkText)在脚本中不起作用。但当我在调试模式下运行时,它就起作用了,selenium-webdriver,selenium-chromedriver,Selenium Webdriver,Selenium Chromedriver,这是位于左侧菜单栏中的,该菜单栏位于嵌套的div元素中。 我的问题是,当我运行selenium脚本时,它会给我一个异常 driver.findElement(By.linkText("ADMINISTRATIVE MODULE")).click(); 请使用以下代码而不是sleep或wait语句来确保网页已完成加载: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {

这是位于左侧菜单栏中的,该菜单栏位于嵌套的div元素中。 我的问题是,当我运行selenium脚本时,它会给我一个异常

 driver.findElement(By.linkText("ADMINISTRATIVE MODULE")).click();

请使用以下代码而不是sleep或wait语句来确保网页已完成加载:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"link text","selector":"ADMINISTRATIVE MODULE"}
在您的情况下,看起来您正在将驱动程序对象传递给每个页面对象方法,因此根据需要进行调整

pageObject.clickLogonButton();
这会让事情变得清晰吗?

今天我读了一些关于简单页面对象的文章

你使用哪种框架并不重要,但我喜欢这种想法

主要的好处是您不必自己关心这些同步问题


如果您喜欢使用普通的WebDriver API,Bill的建议很好!

为什么要添加第二个异常日志?哪一个适用?请尝试将其分为两个步骤:定义webelement,可以选择在其间放置睡眠或等待,然后单击。这可能是一个时间问题,因为它有时会找到元素,有时不会,但始终无法单击。有多种方法等待元素可见和可单击。可能是不可见的阻止元素,但可能只是计时。谢谢@BillHileman…它按照您的建议工作。我有一个类,我在其中查找所有元素,如下所示:public static WebElement gcp_adminIStractive_ModuleWebDriver{propelement=driver.findElementBy.linktextministrative MODULE;返回propelement;}}但是我在LoginClass中调用它,在这里我单击这些元素。那么有没有简单有效的方法来放置等待时间呢?您是否在创建web驱动程序后立即声明隐式等待?我将在下面粘贴用于等待页面加载的代码。我通常在尝试查找元素或ot之前执行此操作herwise与一个元素交互。我已经在这里发布了我的代码,作为对许多其他问题的回答,所以这不是什么新鲜事,但我不会将它指向其他地方,而是会在这里再次发布,以防有所帮助。在获取web元素之前,请致电例程。谢谢@BillHileman。我理解你在这里试图表达的概念。我就是这样做的与你相比,nking更为基础,并且处于非常初级的阶段:-。我需要思考和学习这些技术来实现我的自动化。你建议有什么网站可以帮助我学习这些方法吗?通过我的分享示例,在我学习helper类之前,你是否建议其他任何替代方法来实现这一点。@BillHileman你能给我一个样本co吗在点击之间等待google.com。我试过了,但这里出了问题。你能帮我吗
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");
        }
    });
}
pageObject.clickLogonButton();
public void clickLogonButton() {
    myHelper.waitForPageToLoad();
    logonButton.click();
}