【发布时间】:2020-09-04 00:14:32
【问题描述】:
我正在对Selenium 绑定Python 和Javascript 进行一些试验,发现一些我不明白的差异。
具体来说,我正在使用两个脚本(一个 Python,一个 .js 使用 node 运行)来
- 在
abut:blank打开一个Firefox窗口 - 打开console(即自动化
Ctrl+Shift+k快捷方式) - 打开控制台后找到chrome context 中提供的 iframe
- 切换到该 iframe
- 计算结果文档中的所有按钮
Python
脚本是
from selenium.webdriver import Firefox, DesiredCapabilities, FirefoxProfile
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.keys import Keys
import time
import traceback
options = Options()
webdriver = Firefox(options=options)
webdriver.get("about:blank")
try:
time.sleep(3)
with webdriver.context(webdriver.CONTEXT_CHROME):
time.sleep(3)
console = webdriver.find_element(By.ID, "tabbrowser-tabs")
console.send_keys(Keys.LEFT_CONTROL + Keys.LEFT_SHIFT + 'k')
time.sleep(3)
ifr = webdriver.find_element_by_class_name("devtools-toolbox-bottom-iframe")
webdriver.switch_to.frame(ifr)
elts = webdriver.find_elements_by_tag_name("button")
print(len(elts))
except Exception as error:
traceback.print_exc()
这会打印回13(因此它找到了 13 个按钮)。另一方面,如果我注释掉该行
webdriver.switch_to.frame(ifr)
(即我不切换到框架)然后它会打印出5。
Javascript
脚本在这里
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var firefox = require('selenium-webdriver/firefox');
var inpt = require('selenium-webdriver/lib/input');
var options = new firefox.Options();
var driver = new webdriver.Builder()
.forBrowser('firefox')
.setFirefoxOptions(options)
.build();
(async function(){
await driver.get('about:blank');
await driver.setContext("chrome");
var tabs = await driver.findElement(By.id('tabbrowser-tabs'));
await tabs.sendKeys(inpt.Key.CONTROL + inpt.Key.SHIFT + 'k');
var el, btns;
setTimeout(
async () => {el = await driver.findElement(By.css('.devtools-toolbox-bottom-iframe')); },
3000
);
await driver.switchTo().frame(el);
setTimeout(
async () => {
btns = await driver.findElements(By.css("button"));
await console.log(btns.length);
},
10000
);
})();
无论我做什么,无论我是否离开帧切换线,这个(使用node 运行)都会打印出5
await driver.switchTo().frame(el);
在那里。
它不会出错,所以我知道它会找到框架并成功完成 switchTo 应该做的任何事情,但它找到的 5 个按钮似乎是相同的,无论 switchTo 是否存在(我'还打印了它们的类和ID等;无论是否使用switch命令,行为都是相同的。
【问题讨论】:
标签: python selenium selenium-webdriver firefox