#selenium #salesforce #robotframework #browserstack
#selenium #salesforce #robotframework #browserstack
Вопрос:
Не можете понять, как использовать «Открыть тестовый браузер», который является ключевым словом Cumulusci, при запуске URL-адреса Salesforce в Browserstack?
Справочная информация о проекте: я создаю платформу автоматизации (для функциональных / регрессионных тестов) для продукта Salesforce с использованием Robot Framework, SeleniumLibrary и CumulusCI, и мне необходимо расширить возможности автоматизации для выполнения одних и тех же тестов в нескольких браузерах / ОС, для которых я интегрирую его с BrowserStack.
Сведения об уровне реализации: RFW и Cci интегрированы правильно и отлично работают в любой локальной организации с нуля в Chrome или FF. Здесь я могу напрямую использовать всю мощь ключевых слов Cci, таких как «Open Test Browser», который знает детали организации, такие как instance_url, имя пользователя и пароль, и имеет токен доступа. Так что вход в Организацию — это легкая прогулка. Здесь запуск URL-адреса SF не запрашивает у меня код подтверждения электронной почты.
*** Settings ***
Resource cumulusci/robotframework/Salesforce.robot
Library cumulusci.robotframework.CumulusCI ${ORG}
library SeleniumLibrary timeout=20
library OperatingSystem
library Collections
library XML
library String
library BuiltIn
*** Variables ***
${BSUser} myBSkey
${BSAccessKey} s******************b
${BSUrl} http://${BSUser}:${BSAccessKey}@hub.browserstack.com/wd/hub
###Login Page Locators
${signOn_username} //input[@id='username']
${signOn_password} //input[@name='pw']
${loginButton} //input[@name='Login']
###Home Page Locators
${SetupRecentlyViewed} //div[@class='module-header']/div/header/h2/span
*** Test Cases ***
Connect RFW with BS
${instance_url} ${username} ${password} Log my Org Info #User keyword
Setup BS Browser ${instance_url} ${username} ${password} #User keyword
*** Keywords ***
Log my Org Info
amp;{OrgInfoDict}= Get Org Info #Cci keyword
:FOR ${key} IN @{OrgInfoDict.keys()}
${instance_url}= Get From Dictionary ${OrgInfoDict} instance_url
${username}= Get From Dictionary ${OrgInfoDict} username
${password}= Get From Dictionary ${OrgInfoDict} password
[Return] ${instance_url} ${username} ${password}
Setup BS Browser
[Arguments] ${instance_url} ${username} ${password}
Open Browser url=${instance_url} remote_url=${BSUrl} desired_capabilities=browser:Safari,browser_version:12.0,os:OS X,os_version:Mojave,browserstack.video:True
Maximize Browser Window
Login to Salesforce ${username} ${password}
Login to Salesforce [Arguments] ${Username} ${Password}
Input Text ${signOn_username} ${Username}
Input Text ${signOn_password} ${Password}
Click Element ${loginButton}
${Pass}= RUN KEYWORD AND RETURN STATUS Wait Until Page Contains Element ${SetupRecentlyViewed}
run keyword if '${Pass}'=='True' Log "SF Home page loaded successfully"
... ELSE Fail "SF Home page did not load successfully"
Актуальная проблема:
Обратившись к интеграции RFW и BrowserStack в Интернете (некоторые ссылки ниже), я смог подключиться к BS, но используя ключевое слово Selenium «Открыть браузер». Я также попытался получить всю информацию о моей организации и передать ее в BS, чтобы войти в URL-адрес SF. Когда я делаю это, потому что я использую Selenium, а не в контексте Cci, моя организация SF теперь отправляет мне подтверждение по электронной почте. Поэтому я чувствую, что мне не хватает понимания того, как использовать контекст Cci при запуске тестов в BrowserStack.
Ссылка: https://www.swtestacademy.com/browserstack-robotframework-integration / и https://github.com/knightjacky/Robot-BrowserStack
Попробованные обходные пути: я попытался создать webdriver, а затем использовать «Open Test Browser», который также не работает, потому что, как и ожидалось, у него нет контекста Cci Org.
*** Keywords ***
Create a BS WebDriver
#Some code that creates a dict...
#${executor}= Evaluate str('${BSUrl}')
#Create Webdriver Remote desired_capabilities=${desired_capabilities} command_executor=${executor}
#Open Test Browser #Cci keyword
Ожидаемые мысли:
Пожалуйста, поделитесь некоторыми идеями о том, как я могу настроить свою текущую реализацию, чтобы использовать ключевые слова Cci и не полагаться на Selenium при интеграции с BrowserStack.
Ответ №1:
На данный момент ключевое Open test browser
слово salesforce не поддерживает использование create webdriver
ключевого слова. Тем не менее, легко дублировать то, что Open test browser
делает. Ключ в том, чтобы использовать URL-адрес, содержащий правильно закодированные учетные данные.
Ключевое Login URL
слово из библиотеки CumulusCI вернет вам соответствующий URL-адрес. Затем вы можете использовать этот URL-адрес в любом браузере, независимо от того, как браузер был открыт.
Пример:
В следующем примере будет использоваться браузер по умолчанию в browserstack, а затем будет выполнен вход в мою организацию по умолчанию. Вы также можете передать org в Login URL
ключевое слово, если хотите.
*** Settings ***
Resource cumulusci/robotframework/Salesforce.robot
Suite Setup Setup BS Browser
Suite Teardown Delete records and close browser
*** Variables ***
${BSUser} <your username here>
${BSAccessKey} <your access key here>
${BSUrl} http://${BSUser}:${BSAccessKey}@hub.browserstack.com:80/wd/hub
*** Keywords ***
Setup BS Browser
Create Webdriver Remote command_executor=${BSUrl}
${login_url} Login URL
go to ${login_url}
Wait until loading is complete
*** Test Cases ***
Example using 'create webdriver'
capture page screenshot
Примечание: Ключевое слово salesforce Open Test Browser
делает немного больше, чем просто открывает браузер: оно также устанавливает две стратегии определения местоположения. Если вы не звоните Open Test Browser
и хотите использовать эти стратегии определения местоположения, вам нужно будет зарегистрировать их самостоятельно:
Add Location Strategy text Locate Element By Text
Add Location Strategy title Locate Element By Title
Комментарии:
1. Огромное спасибо @Bryan Oakley, ваше решение работает так, как ожидалось, и служит моей цели.