Python Selenium 4 - Firefox installAddon not working - python-3.x

I've upgraded to selenium 4
new_addon_path = 'D:/GOOD/Coding/uBlock.xpi'
browser1 = selenium.webdriver.Firefox(options=opts, etc....)
browser1.install_addon(new_addon_path)
Error:
selenium.common.exceptions.WebDriverException: Message: Expected absolute path: [Exception... "Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) .....
Documentation:
https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
The documentation says:
Changes to firefox.Driver .. Added installAddon(path)
A temporary profile automatically is created in C:/Users/User/AppData/Local/Temp/
I want this temporary profile, so that I can thread multiple driver sessions at once without creating and assigning new profiles manually.
This temp profile can be found using browser1.__dict__['capabilities']['moz:profile']
Fixes I have tried:
tried placing uBlock.xpi into profile folder, then calling browser1.install_addon(path to profile/extensions/uBlock.xpi)
tried placing uBlock.xpi in same folder as geckodriver.log
All paths fail, regardless of if they are relative or apsolute paths.
Documentation also says:
Changes to firefox.Options .. Added addExtensions
which does not even exist as an option in firefox.Options

Message: Expected absolute path
This error message tells you the exact problem.
install_addon() requires an absolute path, but you are passing it a relative path.
The solution is to use an absolute path.
The documentation says
The documentation you pointed to is for the JavaScript bindings, but your code is using the Python bindings. You are reading the wrong documentation.

The lads at github.com solved the issue,
browser1.install_addon('D:/GOOD/Coding/uBlock.xpi')
should look like:
browser1.install_addon(r'D:\GOOD\Coding\uBlock.xpi')
This works
I'm not sure why, since the service() function or any other python selenium functions works perfectly fine on windows with blackslashes. This path however requires this formula.

Related

Golem Task respons back with runtime error 2, can't determine the cause

Repo for all code I've been using is updated here . When I run the requestor script it exits with a runtime error 2 (File not found). I am not sure how to further debug this or fix it. So far I've converted my code over to a python slim docker image to better mirror the example. It also works for me when I spin up a docker image that typing and running "/golem/work/imageclassifier.py --trainmodel" works from root. I switched all my code to use absolute paths. I also did make sure the shebang (#!) uses linux end of file characters rather than windows before which was giving me errors. Fixed a bug where my script returns error code 2 when called with no args to now pass.
clf.fit(trainDataGlobal, trainLabelsGlobal)
pkl_file = "classifier.pkl"
with open(pkl_file, 'wb') as file:
pickle.dump(clf, file)
is the only piece I could think of that causes the issue, but as far as I can tell this is the proper way to pickle something in python. Requestor script is also heavily based on the simple service example and I tried to mirror my design to that. I just need help in getting more information while debugging, or guidance on how to move forward from here

While working on Robot framework , encountered an Import error message when attempting to add Resource in Setting Section?

In Robot Framework , I have segregated the details into Page objects, keywords and scripts.
After adding keywords in PO, I wanted to add details in Keywords. Here, in Settings section while I give the following details:
*** Settings ***
Library SeleniumLibrary
Resource Resources/PO/Sign-in.robot
I even tried using absolute path by referencing ../ at the beginning. Still, system is unable to recognize it and throwing an error message "Import File Not Found".
What Should I be doing? Please, let me know?
First, you show in the screenshot, the use of a variable ${Resources}, it would be normal for the IDE to not recognize that value for a path. Even so, running the test case may work as expected.
Second, if you want to use the relative path, then the correct value should be:
Resource ../PO/Sign-in.robot

Is this an error in the "path.normalize" documentation?

I've trying to figure out an issue with file paths using path and upath
(specific question: Issue saving to Windows "mapped network drive" in Electron)
Reading the documentation for path.normalize(path) it gives the following examples:
For example, on POSIX:
path.normalize('/foo/bar//baz/asdf/quux/..');
// Returns:
'/foo/bar/baz/asdf'
On Windows:
path.normalize('C:\temp\\foo\bar\..\');
// Returns: 'C:\temp\foo\'
In the first example, what happened to "quux"? And in the second, what happened to "bar"? Are these just copy-paste errors? Sorry if this seems a trivial question but this "path" stuff, particularly on Windows, is very confusing to me (I'm on macOS).
Like the doc says:
The path.normalize() method normalizes the given path, resolving '..' and '.' segments.
Try without the .. at the end, that is suggesting that you're going one directory up and is getting interpreted as basically
cd /foo/bar//baz/asdf/quux
cd ..
Also, this might be a mistake but you got two slashes between bar//baz in here.

Typo3 linux server error: Could not load layout file

After I uploaded my Typo3-Website onto a linux server and tryed to call the homepage, I get the error: "Could not load layout file. Tried following paths: "/Main.html", "/Main" "
I checked the correct spelling (uppercase) of my layout file: It seems to be correct and in the right place. Any ideas?
Thanks a lot. I have checked the file paths and noticed I had to delete the two slashes after the equal signs.
This works on a windows platform:
partialRootPath = /fileadmin/Private/Partials/
layoutRootPath = /fileadmin/Private/Layouts
But on a linux server it has to look this way:
partialRootPath = fileadmin/Private/Partials/
layoutRootPath = fileadmin/Private/Layouts
You seem to be using TYPO3 before 7 and the StandaloneView. In this case, identify in your code where you use this view and check the calls to setTemplatePathAndFilename or the templateRootPath. You are probably having an issue with the root path being set to something that does not exist.
This might be a situation of incompatible cAsiNg of the directory name. This is especially possible if you are testing locally on MacOS (case insensitive) and then uploading to Linux (case sensitive).
If this does not help, please provide us with more information about your scenario (code, settings, environment where it works, etc).

Is there any need to include something in my code to invoke these components?

var localFile = Components.classes["#mozilla.org/filelocal;1"].createInstance(Components.interfaces.nsILocalFile);
localFile.initWithPath("C:\Windows\system32\cmd.exe");
var process = Components.classes["#mozilla.org/processutil;1"].createInstance(Components.interfaces.nsIProcess);
process.init(localFile);
var args=null;
process.run(false, args, args.length);
I am using Firefox/3.6. The above code is not getting invoked. I wanna that is there any need to include something in my code to invoke these components. In my browser these XPComponent are available as i checked using **
XPComViewer.
Plzzz Reply ASAP.
Regards, rAHUL......
i did like this only but i am getting the following error:
Error: Permission denied for http://localhost:8080 to get property XPCComponents.classes Source File: localhost:8080/ViewerSoln Line: 60
i am trying this on Firefox 2.0 and 3.6 both. its windows environment. please suggest me something ASAP.
Thank you,
Rahul.
Set up the development environment and check the Error Console. That would give you hints as to what your problem is.
Just copy the snippet from https://developer.mozilla.org/en/Code_snippets/Running_applications#Using_nsIProcess, that will give you correct code to get the necessary services.
Two less obvious errors are that a '\' has a special meaning and needs to be escaped (as in the linked snippet) and args=null won't work because you try to get its length a line later. You want args=[].
Finally, you didn't say where you're trying to run this from.

Resources