我遇到的问题是InternetExplorer WebDriver让我发疯。
IE由于某种原因不等到页面加载并继续执行代码。
以下代码会打开Google页面,并且不会在以下内容之后打开维基百科页面:
var driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://google.com");
driver.Navigate().GoToUrl("http://wikipedia.org");
FireFox中存在完全不同的行为。此代码打开Google页面,然后打开维基百科页面:
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);
}
刚刚检查了设置页面加载超时的建议。没有帮助。行为是一样的。
致以最诚挚的问候,
梅德
答案 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 :(得分: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毫秒后,它继续到下一页,依此类推。
我"修复"将所有四个区域(Internet,本地Internet,受信任的站点和受限制的站点)中的保护模式设置为关闭到Internet选项对话框中的问题;必须在所有地方关闭标志,否则IEWebDriver会抱怨它并且根本不启动IE。它还修复了有时IE窗口在测试结束时保持打开的问题,尽管有明确的命令关闭它。
它为恶意攻击留出了空间,因此并非适用于所有情况,而是有效。
答案 4 :(得分:0)
为什么不简单地说:
driver.findElement(By.by("element_to_wait_for"));
它会查找一个你知道在页面中退出的元素,直到它用完为止。
您可能还需要更改超时,以免马上失败。