我正在使用nunit C#在selenium网格上运行测试:
Firefox未安装在默认位置,因此我在运行测试时遇到以下异常:
预期的浏览器二进制位置,但无法在默认位置找到二进制文件,未提供'moz:firefoxOptions.binary'功能,并且在命令行上未设置二进制标志(警告:服务器未提供任何堆栈跟踪信息)
我想在node.configselenium网格文件的功能部分指定Firefox可执行文件路径.我如何使用新的geckodriver做到这一点?
firefox_binary现在已经过时,它使用"moz:firefoxOptions",但我不知道如何在selenium节点的配置文件中指定它.
这是我在配置文件中所做的,但它不起作用:
{
"capabilities":
[
{
"platform": "WINDOWS",
"browserName": "firefox",
"moz:firefoxOptions": {
"binary": "D:\\Browsers\\Mozilla Firefox\\firefox.exe"
},
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
]
.........
Run Code Online (Sandbox Code Playgroud) 我在非公共网页上运行非常复杂的python-selenium测试.在大多数情况下,这些测试运行良好,但有时其中一个测试在webdriver本身初始化期间失败.
提示:尝试初始化webdriver时会发生此错误,即执行以下操作时:
# Start of the tests
mydriver = webdriver.Firefox(firefox_profile=profile, log_path=logfile)
# ERROR HAPPENS HERE
# Doing other stuff here
....
# Doing tests here
....
# Doing shutdown here
mydriver.quit()
Run Code Online (Sandbox Code Playgroud)
以下是此类错误的完整示例:
___________ ERROR at setup of TestSuite.test_synaptic_events_fitting ___________
> lambda: ihook(item=item, **kwds),
when=when,
)
/usr/local/lib/python2.7/dist-packages/flaky/flaky_pytest_plugin.py:273:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ …Run Code Online (Sandbox Code Playgroud) 我不确定为什么,但我的脚本一旦到达第9页就会停止爬行.没有错误,例外或警告,所以我有点不知所措.
有人可以帮帮我吗?
def initiate_crawl():
def refresh_page(url):
ff = create_webdriver_instance()
ff.get(url)
ff.find_element(By.XPATH, '//*[@id="FilterItemView_sortOrder_dropdown"]/div/span[2]/span/span/span/span').click()
ff.find_element(By.XPATH, '//a[contains(text(), "Discount - High to Low")]').click()
items = WebDriverWait(ff, 15).until(
EC.visibility_of_all_elements_located((By.XPATH, '//div[contains(@id, "100_dealView_")]'))
)
print(len(items))
for count, item in enumerate(items):
slashed_price = item.find_elements(By.XPATH, './/span[contains(@class, "a-text-strike")]')
active_deals = item.find_elements(By.XPATH, './/*[contains(text(), "Add to Cart")]')
if len(slashed_price) > 0 and len(active_deals) > 0:
product_title = item.find_element(By.ID, 'dealTitle').text
if product_title not in already_scraped_product_titles:
already_scraped_product_titles.append(product_title)
url = ff.current_url
ff.quit()
refresh_page(url)
break
if count+1 is len(items):
try:
next_button = …Run Code Online (Sandbox Code Playgroud) 我用selenium webdriver运行我的rspec测试.设置看起来如下:
require 'capybara/dsl'
Capybara.app = Rack::File.new File.expand_path('../fixtures', __FILE__)
require 'selenium-webdriver'
Capybara.register_driver :firefox do |app|
options = ::Selenium::WebDriver::Firefox::Options.new
options.args << '--headless' if travis?
Capybara::Selenium::Driver.new(app, browser: :firefox, options: options)
end
Capybara.default_driver = :firefox
Run Code Online (Sandbox Code Playgroud)
当我运行rspec测试失败时
Failure/Error: visit '/select2-v3/index.html'
Selenium::WebDriver::Error::UnknownError:
newSession
# WebDriverError@chrome://marionette/content/error.js:178:5
# UnknownCommandError@chrome://marionette/content/error.js:472:5
# despatch@chrome://marionette/content/server.js:290:13
# execute@chrome://marionette/content/server.js:271:11
# onPacket/<@chrome://marionette/content/server.js:246:15
# onPacket@chrome://marionette/content/server.js:245:8
# _onJSONObjectReady/<@chrome://marionette/content/transport.js:490:9
# ./spec/select2_spec.rb:6:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
谷歌搜索没有给我任何结果.
你有任何想法如何解决它?
更新:我使用的是firefox v63.0
我已经升级到 Selenium 4
new_binary_path = FirefoxBinary('path_to_binary')
selenium.webdriver.Firefox(executable_path=path, options=ops, firefox_binary=new_binary_path)
Run Code Online (Sandbox Code Playgroud)
或者
options.add_argument("--setBinary(path_to_binary)")
selenium.webdriver.Firefox(executable_path=path, options=ops)
Run Code Online (Sandbox Code Playgroud)
返回此错误信息
DeprecationWarning: executable_path has been deprecated, please pass in a Service object
Run Code Online (Sandbox Code Playgroud)
文档
https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
说
删除了 firefox.Binary 类。仍然可以使用 firefox.Options#setBinary() 选择自定义二进制文件。同样,可以使用 firefox.Options#addArguments() 指定自定义二进制参数
有谁知道如何实施这些更改?我不知道标签是什么意思。我尝试过options.setBinary()但setBinary()没有被识别。
我想使用 selenium 登录我的 gmail 帐户。我使用 python2.7 。它没有错误,但页面说由于某种原因我无法登录我的帐户。你可以看到下面的截图。
这是我的代码:
import time
import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
EXE_PATH = r'C:\Users\LENOVO\Downloads\geckodriver.exe'
driver = webdriver.Firefox(executable_path=EXE_PATH)
def login():
mail = 'myMail'
pw = 'myPassword'
driver.get('https://gmail.com')
email = driver.find_element_by_name('identifier')
email.send_keys(mail)
driver.find_element_by_id('identifierNext').click()
time.sleep(10)
password = driver.find_element_by_name('password')
password.send_keys(pw)
driver.find_element_by_id('passwordNext').click()
Run Code Online (Sandbox Code Playgroud)
我该怎么办?请帮助我,我只是一个菜鸟和初学者。谢谢师傅
我正在使用 Firefox 和 Geckodriver 在 docker 容器内运行 selenium 测试。当以 root 身份运行该容器时,一切正常。
当以非 root 用户 (USER 1000) 运行容器时,驱动程序无法初始化:
[[1;31mERROR[m] test01_WO_default_dashboard Time elapsed: 132.6 s <<< ERROR!
org.openqa.selenium.TimeoutException:
Failed to read marionette port
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'testrunner-cockpit-3--1-mdbwj', ip: '10.130.2.18', os.name: 'Linux', os.arch: 'amd64', os.version: '4.18.0-305.28.1.el8_4.x86_64', java.version: '11.0.15'
Driver info: driver.version: FirefoxDriver
remote stacktrace:
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:122)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127) …Run Code Online (Sandbox Code Playgroud) 我一直在使用Selenium 3.0.0 beta2和Firefox 48.0.2以及geckodriverv10.0 for win 64.
问题是浏览器崩溃而没有关闭.
> [Child 10232] ###!!! ABORT: Aborting on channel error.: file c:/builds/moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/glue/MessageChannel.cpp,
> line 2046
Run Code Online (Sandbox Code Playgroud)
它通过了测试用例.
我试过FF 46.0.9仍然给出了同样的错误.
有一个测试,像:
import //needed imports
public class TestClass{
WebDriver driver;
@Before
public void setUp() {
//some code
}
@Test
public void test1() {
//some code, including init of driver (geckodriver)
}
//@After
// public void tearDown() {
// driver.quit();
//}
}
Run Code Online (Sandbox Code Playgroud)
所以,我使用firefox实例,使用geckodriver并成功运行我的测试.但是我希望不要在每次运行后关闭firefox窗口,因为我只想分析我拥有的东西,并在测试运行后修复任何需要的东西(我将在稍后的unComment driver.quit()).同时,每次调用而不关闭驱动程序会导致我的PC上的RAM过度影响(并且无关紧要 - 我是否在测试后手动关闭浏览器):

所以,问题是:是否有任何方法可以关闭"geckodriver"的进程(更确切地说 - 执行smth,这将关闭taskmgr中的geckodriver.exe进程),但是在测试完成后不会关闭浏览器?例如,在测试本身添加一些方法,无论如何......这不会影响我的工作/测试本身,我只想添加一些优化.
我在多个节点机器上设置了 selenium 网格,其中我在所有 selenium 节点机器上手动下载 chromeDriver 和 geckoDriver,并将它们分别用于 chrome 和 firefox 浏览器。
现在这里的 chrome 和 firefox 浏览器(在所有 selenium 节点机器上)设置为“自动更新”(这是必需的,因为我希望我的应用程序始终在最新的浏览器版本上进行测试),因为我的节点机器上的浏览器不断更新更常见的是,因为相应的驱动程序更新是一个手动过程,它迫使我登录到每个 selenium 节点机器并手动更新它们。
这个过程可以自动化吗?
PS:我知道 dockerized selenium grid 可用于获取/拉取最新的浏览器图像及其驱动程序,但是从传统 selenium grid 切换到 dockerized selenium grid 是另一回事,需要一些时间来实现。
geckodriver ×10
selenium ×8
firefox ×6
python ×3
capybara ×1
docker ×1
gmail ×1
java ×1
python-2.7 ×1
python-3.x ×1
urllib3 ×1