Selenium InternetExplorerDriver不等待页面加载

时间:2014-06-16 13:20:02

标签: internet-explorer selenium selenium-webdriver webdriver

我遇到的问题是InternetExplorer WebDriver让我发疯。

IE由于某种原因不等到页面加载并继续执行代码。

以下代码会打开Goog​​le页面,并且不会在以下内容之后打开维基百科页面:

var driver = new InternetExplorerDriver();

driver.Navigate().GoToUrl("http://google.com");
driver.Navigate().GoToUrl("http://wikipedia.org");

FireFox中存在完全不同的行为。此代码打开Goog​​le页面,然后打开维基百科页面:

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://google.com");
driver.Navigate().GoToUrl("http://wikipedia.org");

我如何让IE的行为与FireFox相同?

IE版本 - 11.0.9600.17107; Selenium.WebDriver版本 - 2.42(NuGet安装); Selenium.WebDriver.IEDriver版本 - 2.24(NuGet安装)

以下是我用Explicit Waits测试的代码。作为这个测试的结果,我得到“OpenQA.Selenium.WebDriverTimeoutException:30秒后超时---> OpenQA.Selenium.NoSuchWindowException:无法在关闭的窗口上找到元素”:

[TestMethod]
public void Open()
{
    var driver = new InternetExplorerDriver();

    driver.Navigate().GoToUrl("http://google.com");
    driver.Navigate().GoToUrl("http://wikipedia.org");

    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
    var myElement = wait.Until(d => d.FindElement(By.CssSelector("input#www-wikipedia-org")));
    Assert.IsNotNull(myElement);
}

刚刚检查了设置页面加载超时的建议。没有帮助。行为是一样的。

致以最诚挚的问候,

梅德

5 个答案:

答案 0 :(得分:1)

只需在中间添加一个打印声明!我不知道为什么它有效(为什么不能没有),但它可以在我的电脑上运行。使用Java和TestNG,代码如下所示:

@BeforeTest
public void setup() {   
    System.setProperty("webdriver.ie.driver", "C:/Dependancies/IEDriverServer.exe");
    driver = new InternetExplorerDriver();
}

@Test
public void test() {
    driver.get("http://www.gamedev.net/page/index.html");
    //System.out.println(driver.getTitle());
    System.out.println("Hello");
    driver.get("http://www.gamasutra.com/");
}

请注意:

  1. 我在类级别(实例变量)声明了WebDriver类型的驱动程序变量。
  2. 我确定使用的是64位版本的Internet Explorer驱动程序,因为我使用的是64位版本的Internet Explorer浏览器。如果您使用的是32位版本的Internet Explorer浏览器,则需要使用32位版本的Internet Explorer驱动程序。如何查找我们正在使用的Internet Explorer浏览器版本:通过检查其可执行文件的路径,是否在“Program Files”或“Program Files(x86)”中。
  3. 如果您使用的是C#,则可以使用Console.WriteLine()语句而不是System.out.println()语句。

答案 1 :(得分:0)

在初始Web驱动程序初始化后,在代码中添加implicit wait。这将允许在下一步采取之前完全加载初始页面。

答案 2 :(得分:0)

试试这段代码(C#):

Driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));

以上代码将等待最多10秒的页面加载。如果页面加载超过了它将抛出TimeoutException的时间。这是一个隐含的等待。如果你设置了一次它将具有范围,直到Web驱动程序实例销毁。

答案 3 :(得分:0)

我使用的是Windows 7 / IE 11,从Windows 7 / IE 10开始的测试序列开始突然变为不等待页面加载; 10毫秒后,它继续到下一页,依此类推。

我"修复"将所有四个区域(Int​​ernet,本地Internet,受信任的站点和受限制的站点)中的保护模式设置为关闭到Internet选项对话框中的问题;必须在所有地方关闭标志,否则IEWebDriver会抱怨它并且根本不启动IE。它还修复了有时IE窗口在测试结束时保持打开的问题,尽管有明确的命令关闭它。

它为恶意攻击留出了空间,因此并非适用于所有情况,而是有效。

答案 4 :(得分:0)

为什么不简单地说:

driver.findElement(By.by("element_to_wait_for"));

它会查找一个你知道在页面中退出的元素,直到它用完为止。

您可能还需要更改超时,以免马上失败。