I / O异常和无法在IE中使用Selenium Webdriver查找元素

时间:2014-01-24 10:20:28

标签: java eclipse internet-explorer selenium

以下代码适用于Firefox和Chrome,但在IE中执行时会显示错误。

System.setProperty("webdriver.ie.driver", "G:\\Selenium\\IEDriver\\IEDriverServer.exe");
    WebDriver driver=new InternetExplorerDriver();
    driver.get("https://www.google.co.in/?gws_rd=cr&ei=ZDziUrLDEuLpiAeD44H4BA");
    driver.findElement(By.name("q")).sendKeys("Selenium");

显示的错误是I/O exception (java.net.SocketException) caught when processing request: Software caused connection abort: recv failed Jan 24, 2014 3:44:04 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute INFO: Retrying request Exception in thread "main" org.openqa.selenium.NoSuchElementException:

4 个答案:

答案 0 :(得分:8)

问题在于我的IE设置。当IE中的安全设置更改为“Internet”,“本地Intranet”,“可信站点”和“受限制站点”的“启用保护模式”时,问题得以解决。您可以通过转到“Internet选项”安全选项卡并为所有区域启用“启用保护模式”复选框来更改它。我能够从链接http://jimevansmusic.blogspot.in/2012/08/youre-doing-it-wrong-protected-mode-and.html

获取这些信息

答案 1 :(得分:0)

请查看以下Python代码(应该类似于Java):

from selenium import webdriver

def findElement(browser):
    browser.get("https://www.google.co.in/?gws_rd=cr&ei=ZDziUrLDEuLpiAeD44H4BA")
    element = browser.find_element_by_name("q")
    return element.get_attribute("outerHTML")

ieBrowser = webdriver.Ie()
print "IE: "+findElement(ieBrowser)

ffBrowser = webdriver.Firefox(firefox_profile=webdriver.FirefoxProfile())
print "FF: "+findElement(ffBrowser)

以上代码的输出为:

IE: <input id="lst-ib" class="lst lst-tbb" title="חיפוש" name="q" maxLength="2048" value="" size="41" type="text" autocomplete="off">

FF: <input spellcheck="false" dir="ltr" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) repeat scroll 0% 0% transparent; position: absolute; z-index: 6; left: 0px; outline: medium none;" id="gbqfq" class="gbqfif" name="q" autocomplete="off" value="" type="text">

所以我能够在两种浏览器中找到您正在寻找的元素(使用Selenium v​​2.39.00)。

答案 2 :(得分:0)

您可以尝试使用Explicit wait

等待元素可见
new WebDriverWait(driver,60).until(ExpectedConditions.visibilityOfElementLocated(By.id("gbqfq"))).sendKeys("Selenium");

答案 3 :(得分:0)

配置启用保护模式(Internet,本地Intranet,受信任的站点,受限制的站点),这四个选项对我来说已经足够了。