导入定义的硒功能浏览器问题



设置

我把硒用于各种各样的事情,并发现自己一次又一次地定义相同的功能。

我决定在一个单独的文件中定义这些函数,并将它们导入到我的工作文件中。


简单示例

如果我在一个文件中定义函数并执行所有函数,一切都会很好。请参阅下面的简单的full_script.py

# import webdriver
from selenium import webdriver
# create browser
browser = webdriver.Firefox(
executable_path='/mypath/geckodriver')
# define short xpath function
def el_xp(x):
return browser.find_element_by_xpath(x)      
# navigate to url
browser.get('https://nos.nl')
# obtain title first article
el_xp('/html/body/main/section[1]/div/ul/li[1]/a/div[2]/h3').text

这成功地返回了这个新闻网站上第一篇文章的标题。


问题

现在,当我将脚本拆分到xpath_function.pyrun_text.py中,并将它们保存在桌面上的test文件夹中时,一切都不正常。

xpath_function.py

# import webdriver
from selenium import webdriver
# create browser
browser = webdriver.Firefox(
executable_path='/mypath/geckodriver')
# define short xpath function
def el_xp(x):
return browser.find_element_by_xpath(x)  

run_test.py

import os
os.chdir('/my/Desktop/test')
import xpath_function as xf
# import webdriver
from selenium import webdriver
# create browser
browser = webdriver.Firefox(
executable_path='/Users/lucaspanjaard/Documents/RentIndicator/geckodriver')
browser.get('https://nos.nl')
xf.el_xp('/html/body/main/section[1]/div/ul/li[1]/a/div[2]/h3').text

执行run_test.py导致打开两个浏览器,其中一个浏览器导航到新闻网站,下面的错误

NoSuchElementException: Unable to locate element: 
/html/body/main/section[1]/div/ul/li[1]/a/div[2]/h3

我想问题是在xpath_function.pyrun_test.py中我都定义了一个browser

但是,如果我没有在xpath_function.py中定义浏览器,我会在该文件中得到一个错误,即没有定义浏览器。

我该如何解决此问题?

您可以通过更改el_exp的定义来轻松修复它,将浏览器作为一个额外的参数:

def el_xp(browser, x):
return browser.find_element_by_xpath(x)

现在在run_test.py中,您这样称呼它:

xf.el_xp(browser, '/html/body/main/section[1]/div/ul/li[1]/a/div[2]/h3').text

最新更新