【问题标题】:How to use DesiredCapabilities class through IEDriverServer in Selenium and Python如何在 Selenium 和 Python 中通过 IEDriverServer 使用 DesiredCapabilities 类
【发布时间】:2018-07-11 13:13:13
【问题描述】:

我一直在努力使用在 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()

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

【问题讨论】:

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


【解决方案1】:

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

  • 您需要使用DesiredCapabilities.INTERNETEXPLORER.copy(),而不是使用DesiredCapabilities.INTERNETEXPLORER。

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

  • 根据The Desired Capabilities implementation executablePath() 不是任何有效参数。而是在初始化 WebDriver/WebClient 时传递参数 executable_path。
  • 由于您添加了选项introduceFlakinessByIgnoringSecurityDomains(),根据博客You're Doing It Wrong: IE Protected Mode and WebDriver 中的讨论,@JimEvans 明确提到添加INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS 可能会让您摆脱最初的异常,并允许测试在大多数情况下运行而无需事件。但是,使用此功能并不能解决根本问题。如果跨过保护模式边界,则会出现非常意外的行为,包括挂起、元素位置不起作用和未传播点击 em>,可能会发生。
  • 当您将 字符序列 发送到 Google 搜索框 而不是 presence_of_element_located() 方法时,请使用 element_to_be_clickable() 方法.

  • 这是您自己的代码,经过一些修改:

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    cap = DesiredCapabilities.INTERNETEXPLORER.copy()
    cap['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
    driver = webdriver.Ie(capabilities=cap, executable_path=r'C:\Utility\BrowserDrivers\IEDriverServer.exe')
    driver.get('https://google.com')
    search = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME, 'q')))
    search.send_keys("selenium")
    search.submit()
    

浏览器快照


参考

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

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多