【问题标题】:Page loading and Selenium - Driver not doing anything after it loads页面加载和 Selenium - 加载后驱动程序不执行任何操作
【发布时间】:2013-01-28 20:37:31
【问题描述】:

我正在尝试自动化(Java + Selenium)网站测试,但我在等待和让它做我想做的事情时遇到了很多问题。

一旦我准备好几个单元测试,我的问题就是:
* 如果我不做任何等待,只执行代码,firefox 启动,页面加载并且不做任何其他事情。我的印象是页面会在返回控制权之前加载,但这似乎不会在这里发生。如果我没有运行它,而是设置了一个断点,调试它并逐步运行它,一切都会完美运行,这让我相信这是一个时间问题。

如果我写这个,那么它也很好用:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

但是,如果我希望它等待某个元素可见(如用户名或密码字段)或按钮可点击(如登录按钮),则光标停留在 URL 栏中,它绝对不会做任何事情加载页面。

        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id='isc_E']"))));

(是的,我知道我可以使用 ID 而不是 xpath,这是我的许多尝试之一的剩余部分)。

在那段代码之后,它应该在两个文本字段上执行几个 sendKeys(),然后在登录按钮上执行 click() 并停止。我是否需要添加任何其他内容才能实际执行等待命令,或者这是否足够?

我知道我可能以一种相当愚蠢的方式把它搞砸了,但我终生无法找到它或靠我自己解决它。

谢谢。

【问题讨论】:

  • 你能告诉我们你是如何点击提交按钮的吗?
  • 当然,像这样 -> driver.findElement(By.xpath("//*[@id='isc_E']")).click().
  • @Arran:不知道如何在这里发布完整的代码,所以这里有一个链接-> link

标签: java selenium selenium-webdriver wait


【解决方案1】:

我不确定您是如何单击提交按钮的。但它应该走下面的路

// WebDriver instance for explicit wait by default on until condition
WebDriverWait wait = new WebDriverWait(driver, 5000);
// waits until elements gets ready 
WebElement we = wait
              .until(ExpectedConditions.elementToBeClickable(By
                            .xpath("//*[@id=\"searchSubmit\"]")));

//  once elements is ready it will clicked
driver.findElement((By) we).click();

driver.findElement(By.xpath("//*[@id=\"searchSubmit\"]")).click();

Explicit and Implicit Waits

希望对你有帮助。

【讨论】:

  • 我让驱动程序通过 ID 或 xpath 查找元素,xpath 找到了提交按钮,所以在等待之后我发布了“driver.findElement(By.xpath(”// *[@id='isc_E']"))"。你能更好地解释一下这条线吗? “driver.findElement((By) we).click();”,不知道加粗的部分可以这样写。我正在寻找您在上一步中找到的 webElement,对吗?。
  • @Laucien 我更新了答案。试试这个方法。我还添加了可以帮助您的链接。我只是在空闲时间玩硒,所以我不是专业人士。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2011-09-02
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多