如何在Selenium和Python中通过IEDriverServer使用DesiredCapabilities类

时间:2018-07-11 13:13:13

标签: python selenium internet-explorer selenium-webdriver selenium-iedriver

由于某种原因,我一直无法在IE11中使用一个简单的python脚本,但是它找不到任何元素,但是通过在Java代码中设置一些所需的功能使其起作用:

System.setProperty("webdriver.ie.driver", "C:\\Python27\\IEDriverServer.exe");
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
WebDriver driver = new InternetExplorerDriver(ieCapabilities);//
driver.navigate().to("http://www.google.com");
WebElement search =driver.findElement(By.name("q"));
search.sendKeys("selenium");
search.submit(); 

但是,由于我已经用python编写了测试,所以我想在python中使用相同的方法:

caps = DesiredCapabilities.INTERNETEXPLORER
caps['executablePath'] = 'C:\\Python27\\IEDriverServer.exe'
caps['InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
browser = webdriver.Ie(capabilities=caps)
browser.get('https://google.com')
search = WebDriverWait(browser,10).until(EC.presence_of_element_located((By.NAME, 'q')))
search.send_keys("selenium")
search.submit()

但是由于某种原因,硒仍然无法找到搜索栏,所以我猜我在python中写的等效词是不正确的,有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您必须注意以下两个事实:

  • 您需要使用 $x() 而不是使用DesiredCapabilities.INTERNETEXPLORER
  

注意:始终在 DesiredCapabilities 对象上使用DesiredCapabilities.INTERNETEXPLORER.copy(),以避免更改Global类实例的副作用。

  • 根据The Desired Capabilities implementation .copy()并不是有效的参数。初始化 WebDriver / WebClient 时,应传递参数executablePath
  • 当您按照You're Doing It Wrong: IE Protected Mode and WebDriver添加了选项executable_path时,@ JimEvans再次明确提到添加introduceFlakinessByIgnoringSecurityDomains();可能会使您摆脱最初的例外,并且可以在大多数情况下运行测试没有事件。但是,使用此功能并不能解决潜在的问题。如果越过保护模式边界,则会出现非常意外的行为,包括挂起元素位置不起作用点击未被传播,可能会发生。
  • Google搜索框发送字符序列时,请使用 INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS < / strong>方法。

  • 这是您自己的代码,进行了一些修改:

    presence_of_element_located()
  • 浏览器快照:

google_search_selenium_ie

  • 参考:

您在这里找到有关Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070012 with Selenium 3.13.0: IEDriverServer_x64_3.13.0的详细讨论