Как использовать ключевые слова CumulusCI при интеграции с 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
    &{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.

Попробованные обходные пути: я попытался создать веб-драйвер, а затем использовать «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.


person vish4444    schedule 17.04.2019    source источник


Ответы (1)


В настоящий момент ключевое слово salesforce Open test browser не поддерживает использование ключевого слова create webdriver. Однако то, что делает Open test browser, легко повторить. Ключевым моментом является использование URL-адреса, который содержит правильно закодированные учетные данные.

Ключевое слово Login URL из библиотеки CumulusCI вернет вам соответствующий URL-адрес. Затем вы можете использовать этот URL-адрес в любом браузере, независимо от того, как браузер был открыт.

Пример:

В следующем примере будет использоваться браузер по умолчанию в стеке браузера, а затем будет выполнен вход в мою организацию по умолчанию. Вы также можете передать организацию в ключевое слово 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
person Bryan Oakley    schedule 17.04.2019
comment
Большое спасибо @Bryan Oakley, ваше решение работает так, как ожидалось, и служит моей цели. - person vish4444; 18.04.2019