Как использовать ключевые слова CumulusCI при интеграции с BrowserStack?

#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, ваше решение работает так, как ожидалось, и служит моей цели.