Как использовать ключевые слова CumulusCI при интеграции с BrowserStack? - PullRequest
0 голосов
/ 17 апреля 2019

Невозможно понять, как использовать "Open Test Browser", который является ключевым словом Cumulusci, при запуске URL-адреса Salesforce в Browserstack?

История проекта: Я создаю инфраструктуру автоматизации (для функциональных / регрессионных тестов) для продукта Salesforce, используя Robot Framework, SeleniumLibrary и CumulusCI, и мне необходимо расширить возможности автоматизации для выполнения одних и тех же тестов в нескольких браузерах / ОС, для которых я интегрирую его с BrowserStack.

Детали уровня реализации: RFW и Cci интегрированы правильно и отлично работают на любой локальной организации в Chrome или FF. Здесь я могу напрямую использовать всю мощь ключевых слов Cci, таких как «Open Test Browser», который знает подробности организации, такие как instance_url, имя пользователя и пароль, и имеет токен доступа. Таким образом, вход в Org является легкой прогулкой. При запуске 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 для входа в SF-URL. Когда я делаю это, потому что я использую Selenium, а не в контексте Cci, моя SF-организация теперь выдает мне подтверждение по электронной почте. Следовательно, я чувствую, что не понимаю, как использовать контекст Cci при запуске тестов на BrowserStack. Ссылка: https://www.swtestacademy.com/browserstack-robotframework-integration/ и https://github.com/knightjacky/Robot-BrowserStack

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

0 голосов
/ 17 апреля 2019

В настоящее время ключевое слово 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
...