测试开发从0到1

  1. 手动放置可执行文件至目录/usr/local/Webdriver/bin。又如/opt/WebDriver/bin(M1芯片)或C:\WebDriver\bin
  2. 将目录添加至路径(参考知乎收藏文章)如何看到变化?
    环境变量:操作系统中用来指定操作系统运行环境的一些参数。PATH环境变量(设备可执行文件的搜索路径),当要求系统运行一个程序而没有告诉它程序的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。
  • 临时/永久修改路径
# 临时设置环境变量,仅在当前shell会话中有效
export PATH=$PATH:/opt/WebDriver/bin >> ~/.profile # 修改本地用户路径
# export用于设置或显示环境变量,效力仅限于该次登陆操作;$引用变量的值;PATH是:分隔的列表;>> 代表写入文件;profile可以让我们定义一系列配置信息;.点dot代表当前目录;单一/斜线forward slash代表root根目录
# 全局变量即所有系统用户/etc/profile;按用户定义变量~/.profile

# 永久设置环境变量
vi .zshrc
i
export PATH="$PATH:/opt/WebDriver/bin" # 修改本地用户路径
esc
:wq # 保存并退出
source ~/.zshrc # source即.点命令,更新刚修改的文件,无须注销重新登录(vi编辑需)

# 查看环境变量
echo $PATH # or `printenv $PATH`

# 删除冗余环境变量
export PATH=`echo $PATH | cut -d":" -f1,2,4-` # 如删除四个系统路径中的第三处冗余
  • Bad CPU type in executable 可执行文件中CPU类型不正确。
    原因:苹果公司要求所有软件必须集中签名和公证,当使用其他已公证程序(如网页浏览器)从网络上下载相应驱动时会出现验证问题。Firefox源代码文档 >> geckodriver >> macOS
    解决方案:通过macOS公证程序以外的其他方式下载,如curl/wget命令。Homebrew macOS安装教程
# 安装Homebrew
/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)" # 参考教程 (> openssl@1.1 is keg-only, which means it was not symlinked into /usr/local, because macOS provides LibreSSL. If you need to have openssl@1.1 first in your PATH, run:
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc)

brew install wget #安装wget命令

# 用wget命令下载geckodriver(driver版本通常不超过浏览器版本)
wget https://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-macos.tar.gz # aarch64版本适用于苹果公司2020年发布的基于ARM架构的M1芯片机器。
# 解压手动添加至目录,或在先打开目标目录再使用该命令语句,输入用户密码后用下面的语句解压文件
sudo tar -xzvf 文件名 # 解压文件

补充建议方案(个人尝试未成功):已通过浏览器下载手动删除隔离检查扩展信息

# 删除二进制文件中的隔离检查
% xattr /opt/WebDriver/bin/geckodriver # xattr命令用于展示和修改扩展属性(与文件系统属性如修改时间文件大小等区分)
com.apple.lastuseddate#PS
com.apple.macl
com.apple.quarantine # 操作系统添加的隔离属性
% xattr -r -d com.apple.quarantine /opt/WebDriver/bin/geckodriver # -r以递归方式 -d删除文件的某个属性 -dr以递归方式删除文件夹下所有文件的某个属性

实例化Firefox

#Simple assignment
from selenium.webdriver import Firefox
driver = Firefox()

#or use the context manager
from selenium.webdriver import Firefox
with Firefox() as driver:
   #your code inside this indent

try

from selenium import webdriver
    driver=webdriver.FireFox()
    driver.get("http://www.cn.bing.com/")
    assert'Bing'in driver.title
    driver.quit()

出现问题

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/wanglifei/other/测试开发工程师/check_Bing/check_Bing.py", line 4, in <module>
    driver=webdriver.Firefox()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
    self.service.start()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

❓为什么已将浏览器自动化相关驱动父母路添加至系统路径,仍然报出上述错误,需要在代码中设置可执行文件的路径如下所示❓

from selenium import webdriver

if __name__ == '__main__':
    path = '/usr/local/WebDriver/bin/geckodriver'
    driver=webdriver.Firefox(executable_path=path)
    driver.get("http://cn.bing.com/")
    assert'Bing'in driver.title
    driver.quit()

其他
shell:俗称壳,区别于核。操作界面软件(交互式命令解析器),类似于DOS下的cmd.exe,也是一种程序设计语言。Bash、zsh等都是不同版本的shell。
JDK(Java Development Kit) 是Java语言的软件开发工具包,JRE(Java Runtime Environment) Java SE Downloads
JAR(Java Archive)是一种软件包文件格式,可使用JDK自带的jar命令创建或提取JAR文件。