Я обновил решение mthoring для современных версий Chrome:
function logout(secUrl, redirUrl) {
if (bowser.msie) {
document.execCommand('ClearAuthenticationCache', 'false');
} else if (bowser.gecko) {
$.ajax({
async: false,
url: secUrl,
type: 'GET',
username: 'logout'
});
} else if (bowser.webkit || bowser.chrome) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(\"GET\", secUrl, true);
xmlhttp.setRequestHeader(\"Authorization\", \"Basic logout\");\
xmlhttp.send();
} else {
// http://stackoverflow.com/questions/5957822/how-to-clear-basic-authentication-details-in-chrome
redirUrl = url.replace('http://', 'http://' + new Date().getTime() + '@');
}
setTimeout(function () {
window.location.href = redirUrl;
}, 200);
}
В библиотеку ничего не встроено, чтобы вы могли делать то, что хотите как таковое . Однако вы можете создать свою собственную библиотеку, которая может получить доступ к функциям selenium. Это можно сделать двумя способами, которые требуют создания собственной библиотеки в python. Эти методы предназначены для подкласса Selenium2Library или для получения ссылки на экземпляр Selenium2Library.
. Один из способов доступа к внутренним элементам Selenium2Library - написать класс библиотеки, который наследуется от Selenium2Library. Когда вы это сделаете, у вас есть доступ ко всему в исходной библиотеке. Затем вы можете вернуть ссылку на объект WebDriver или просто написать свои собственные ключевые слова в python.
В качестве примера, это обычная библиотека селена, которая имеет новое ключевое слово, которое вернет текущий экземпляр WebDriver , Он делает это, вызывая частный (к исходному методу Selenium2Library) _current_browser
. Поскольку это частный метод, нет никакой гарантии, что он выдержит проверку временем, но в то время, когда я пишу это, он существует.
Сначала создайте новый файл python с именем CustomSeleniumLibrary.py. Поместите его туда, где робот может его найти - проще всего просто положить его в ту же папку, что и тестовый набор, который будет его использовать. Поместите в этот файл следующее:
from Selenium2Library import Selenium2Library
# create new class that inherits from Selenium2Library
class CustomSeleniumLibrary(Selenium2Library):
# create a new keyword called "get webdriver instance"
def get_webdriver_instance(self):
return self._current_browser()
Затем напишите тестовый пример, который использует это вместо Selenium2Library. Например:
*** Settings ***
| Library | CustomSeleniumLibrary.py
| Suite Teardown | close all browsers
*** Test Cases ***
| Example using custom selenium library
| | Open browser | http://www.example.com | browser=chrome
| | ${webdriver}= | Get webdriver instance
| | log | webdriver: ${webdriver}
Запустить тест, как и любой другой тест. Когда он завершится, вы увидите что-то подобное в журнале:
16:00:46.887 INFO webdriver: <selenium.webdriver.chrome.webdriver.WebDriver object at 0x10b849410>
Сообщение cryptic ...<selenium....WebDriver object...>
доказывает, что переменная на самом деле содержит ссылку к объекту WebDriver python. Используя синтаксис расширенного синтаксиса робота, вы можете затем вызвать методы и получить доступ к этим объектам, если хотите. Я не рекомендую делать это таким образом, но я думаю, что очень интересно, что робот поддерживает его:
| | log | The page title is ${webdriver.title}
. Второй способ выполнения это использование метода робота для получения экземпляра библиотеки, после чего вы можете получить доступ к объекту, как хотите. Это описано в руководстве пользователя робота; см. Получение активного экземпляра библиотеки из Robot Framework в руководстве пользователя Robot Framework .
Например, ключевое слово get_library_instance из приведенного выше примера будет выглядеть так:
from robot.libraries.BuiltIn import BuiltIn
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
Обратите внимание, что в этом случае вы должны включить как Selenium2Library , так и ваша пользовательская библиотека:
*** Settings ***
| Library | Selenium2Library
| Library | CustomSeleniumKeywords.py
| Suite Teardown | close all browsers
*** Test Cases ***
| Example using custom selenium keyword
| | Open browser | http://www.example.com | browser=chrome
| | ${webdriver}= | Get webdriver instance
| | log | webdriver: ${webdriver}
Взгляните на пример руководства пользователя Robot Framework:
Получение активного экземпляра библиотеки из Robot Framework
Самое большое преимущество над наследованием (как было указано до), заключается в том, что вы можете использовать исходную библиотеку нормально и использовать новую библиотеку в дополнение к ней, когда это необходимо.
Вам не нужен robotf-ramework для «Открыть браузер» и создать все шаги в роботе. Вы можете просто использовать робот в качестве секвенсора и вызывать из обычных скриптов python робота с селеном (установить селен с пипсом). Затем в роботе у вас будет набор тестов обычных небольших скриптов python с селеном. Это немного больше касается навыков программирования, но вы будете использовать более стандартный синтаксис codding в сценариях python, которые управляют ключевыми словами. Таким образом, вы можете инкапсулировать все детали в сценарии python и подвергать только высокий уровень роботу (через тестовый набор).