Импортировать определенную проблему браузера функции селена - PullRequest
0 голосов
/ 08 ноября 2018

Настройка

Я использую селен для множества вещей и обнаружил, что снова и снова определяю одни и те же функции.

Я решил определить функции в отдельном файле и импортировать их в мои рабочие файлы.


Простой пример

Если я определяю функции и выполняю все в одном файле, все работает нормально. См. Простой 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.py и run_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 приводит к открытию 2-х браузеров, из которых один переходит на новостной сайт и появляется следующая ошибка,

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

Полагаю, проблема в том, что и в xpath_function.py, и в run_test.py я определяю browser.

Однако, если я не определяю браузер в xpath_function.py, я получаю ошибку в этом файле, что браузер не определен.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете легко исправить это, изменив определение 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
...