3

我正在尝试自动化(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() 并停止。我是否需要添加任何其他内容才能实际执行等待命令,或者这是否足够?

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

谢谢。

4

1 回答 1

0

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

// 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();

显式和隐式等待

我希望这可以帮助你。

于 2013-01-28T22:24:15.793 回答