带有 IE11 的 Selenium 3.0.1 在 Windows 10 上找不到元素(在带有 IE11 的 Windows 7 上运行良好)

Posted

技术标签:

【中文标题】带有 IE11 的 Selenium 3.0.1 在 Windows 10 上找不到元素(在带有 IE11 的 Windows 7 上运行良好)【英文标题】:Selenium 3.0.1 with IE11 not finding elements on Windows 10 (Works fine on Windows 7 with IE11) 【发布时间】:2017-07-21 10:05:20 【问题描述】: 操作系统:Windows 10 浏览器:IE11 Selenium (Python) 包:3.0.1 IEWebDriverServer.exe: 3.1.0

我们正准备将我们的自动化节点迁移到 Windows 10,在我们的测试期间,我们发现虽然我们的脚本在 Win7 上的 FF、IE 和 Chrome 上运行良好,但它们在 Windows 10 上仅适用于 IE 失败(适用于FF 和 Chrome)。

当运行agianst IE时,浏览器实例化并且webdriver能够看到浏览器(我尝试了一个简单的命令,例如driver.back()返回上一页)。但是,我们无法让任何 find_element... 调用正常工作。无论是通过 id、name、css、xpath 等。脚本都会失败,说明没有为给定的 id/name/css/xpath 找到任何元素(无论我尝试使用什么方法来查找 webelement)。

我看到有关安全更新的帖子破坏了这一点并建议恢复更新。不过这是一年前的事了,看来后续的更新已经解决了这个问题。

我还阅读了有关确保所有区域、注册表值等的保护模式相同的帖子。但这些建议都没有奏效。

这是我正在使用的示例脚本(当修改为在 Chrome 或 Firefox 中运行时)仅在 IE11 中不起作用:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Ie()
driver.implicitly_wait(30)
driver.maximize_window()

# navigate to the application home page
driver.get("http://www.google.com")

# get the search textbox
search_field = driver.find_element_by_id("lst-ib")

运行此脚本的错误是:

selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with id == lst-ib

【问题讨论】:

你能添加你无法执行的代码吗(听起来你在 IE 10 中有一个热门的安全功能,在这种情况下你无能为力) 这很简单: self.driver.find_element_by_xpath("//td[text()='Login']").click() 这在 Windows 10 上适用于 FF 和 Chrome但不是在 IE11 中。我尝试了各种替代方法,例如 find_element_by_css_selector、by_id、by_name 等。但在所有情况下,它都表示它找不到元素。我觉得肯定有一些明显的事情我不知道,因为似乎没有其他人发布过这个问题。 补充一下,我使用列出的示例示例创建了一个非常简单的测试,用于创建基本的 selenium 脚本(在本例中为 python 示例)。我看到了同样的行为。 IE 加载并导航到 URL,但找不到任何元素。该脚本未能说“无法找到具有 id ... 的元素”。任何帮助或建议将不胜感激。 这里给出的解决方案 ***.com/a/32624292/2575259 在您所处的相同环境中为我工作。 谢谢,我从未尝试过第一种方法(设置初始 URL),但已经设置了注册表。我刚刚尝试添加功能“initialBrowserUrl”,但仍然不行。 【参考方案1】:

虽然我确定您现在没有那么烦恼,但我几天前记录了同样的问题,但我仍然卡住了 (click here)。我已将问题进一步缩小到安全性。如果您增加日志记录,您将看到以下行:

W 2017-03-06 17:27:41:539 Script.cpp(494) -2147024891 [Access is denied.]: Unable to execute code, call to IhtmlWindow2::execScript failed
W 2017-03-06 17:27:41:540 Script.cpp(180) Cannot create anonymous function
W 2017-03-06 17:27:41:540 ElementFinder.cpp(98) A javascript error was encountered executing the findElement atom. 

我已尝试打开/关闭所有安全选项,但无济于事。我在本地遇到问题,还没有设置我的 CI 环境,所以希望当我启动它时它应该可以正常工作(手指交叉)。

附:我不认为你的虚拟机坏了!!

【讨论】:

对,对于“损坏的虚拟机”一词感到抱歉。我知道虚拟机不一定坏了,但我怀疑发生了一些更新(无论是操作系统还是浏览器的补丁/安全更新),这导致了这种情况。但是,鉴于我似乎没有办法撤消这一点,我就这么说了。如果你找到一种方法让它发挥作用,我会全力以赴,将不胜感激。我保留了这个虚拟机,并将在两者之间进行比较,看看我是否也可以隔离它。【参考方案2】:

每当我偶然发现“NoSuchElementException”(尽管不是在 Windows 或 IE 上)时,这总是有效的:

添加这些导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

然后定位元素:

search_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, """//*[@id="lst-ib"]""")))
search_field.send_keys('Example')

感谢使用 Python 进行网页抓取。我希望这会有所帮助,尽管目前我没有 Windows 或 IE 来提前验证这一点。

【讨论】:

感谢您的建议,但不,这不适用于 IE。重要的是要注意简单的 find 元素调用在 FF 和 CH 中工作正常。只是 Windows 10 上没有 IE11。

以上是关于带有 IE11 的 Selenium 3.0.1 在 Windows 10 上找不到元素(在带有 IE11 的 Windows 7 上运行良好)的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Internet Explorer 11 / IE11 运行 Codeception / Selenium 时出现 PHPUnit_Framework_Exception

Selenium WebDriver-无法在IE11中拖放元素

如何通过 IE11 解决 selenium python 中嵌套 HTML 中的超链接?

尝试使用Internet Explorer 11 / IE11运行Codeception / Selenium时的PHPUnit_Framework_Exception

解决selenium2在IE11上出错的问题,如Unable to get browser

IE11,Chrome65.0.3325.146,Firefox58的webdriver驱动下载,并用selenium驱动来实现自动化测试