1、报错:Can not connect to the Service chromedriver

项目之前运行一直没有问题,今天运行突然报错,本来以为是chrome不小心更新了导致chromedriver匹配不上,但是最后发现是 localhost配置错了

localhost如下配置即可

 

2、find_element方法底层,id/name/tag_name/class_name都是基于 CSS 定位的

如果通过find_element找到了多个元素,也会默认找第一个

国内CSS:https://www.w3school.com.cn//cssref/css_selectors.asp

 

3、隐式等待、显式等待

隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。

显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,如果在规定的时间没有等到 ,就报错。

    def setup_method(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://testerhome.com/")
        # todo:隐式等待5s,超过则报错
        self.driver.implicitly_wait(5)

 

# todo:显式等待
        # sleep(2)
        element = (By.PARTIAL_LINK_TEXT, '霍格沃兹测试学院')
        WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(element))
        self.driver.find_element(*element).click()

 

4、【跳过登录流程,进行UI自动化】

本地指定ip 端口打开浏览器(前提:一定要关闭当前浏览器)

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

 正常的话,执行完命令会显示

 

如果没有红框,可以执行命令 netstat -p tcp -an | grep 9222,查看是否有9222的进程,没有的话,再次关闭所有浏览器,然后重新执行第一条命令

这样在selenium中代码,可以直接在当前打开的浏览器中 继续打开页面进行UI自动化,这种方法可以跳过某些需要登录才能操作的网站

我们可以在这个9222打开的浏览器,提前登录成功,然后进行UI自动化,这样可以避免登录

options = webdriver.ChromeOptions()
options.debugger_address = "127.0.0.1:9222"
self.driver = webdriver.Chrome(options=options)
self.driver.get("https://testerhome.com/")

 

5、元素定位,优先使用name

原因:name是要传给服务端的,前端不会随意更改的,如果改了,服务端也要改,使用name 定位更好的判断代码是否有问题 

而id 只要确保不唯一就可以

 

6、chromedriver 下载解压后 ,放到  usr/local/bin下【MAC】 

 posted on 2020-03-18 10:52  Lverson_tester  阅读(172)  评论(0编辑  收藏  举报