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

如何在Selenium和Python中通过IEDriverServer使用DesiredCapabilities类,python,selenium,internet-explorer,selenium-webdriver,selenium-iedriver,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.setCa

我一直在为一个在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编写的等价物是不正确的,有人能给我指出正确的方向吗?

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

  • 您需要使用
    DesiredCapabilities.INTERNETEXPLORER
    而不是
    DesiredCapabilities.INTERNETEXPLORER.copy()
注意:始终在DesiredCapabilities对象上附加
.copy()
,以避免更改全局类实例的副作用

  • 根据
    executablePath()
    不是任何有效参数。而是在初始化WebDriver/WebClient时传递参数
    executable\u path
  • 由于您添加了选项
    introducteFlakinessByIgnoringSecurityDomains()
    ,根据@JimEvans博客中的讨论,添加
    introduction\u FLAKINESS\u BY\u ignore\u SECURITY\u DOMAINS
    可以让您通过初始异常,并允许测试在大多数情况下运行而不会发生意外。但是,使用此功能并不能解决根本问题。如果跨越受保护模式边界,可能会发生非常意外的行为,包括挂起、元素位置不工作以及未传播的单击
  • 当您向Google搜索框发送字符序列而不是
    presence\u of_element\u located()
    方法时,请使用
    element\u to_be\u 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()
    

浏览器快照


参考文献 在这里,您可以找到有关

可能重复的