与 BrowserStack 集成时如何利用 CumulusCI 关键字?
How to leverage CumulusCI keywords when integrating with BrowserStack?
无法理解在 Browserstack 上启动 Salesforce url 时如何利用 "Open Test Browser" 这是一个 Cumulusci 关键字?
项目背景:
我正在使用 Robot Framework、SeleniumLibrary 和 CumulusCI 为 Salesforce 产品构建一个自动化框架(用于 functional/regression 测试),并且需要扩展自动化功能以在我正在集成它的多个 browsers/OS 上执行相同的测试与浏览器堆栈。
实现级别详细信息:
RFW 和 Cci 已正确集成,并且可以在 Chrome 或 FF 中的任何本地临时组织上完美运行。在这里,我可以直接利用 Cci 关键字的全部功能,例如 "Open Test Browser",它知道 instance_url、用户名和密码等组织详细信息并具有访问令牌。所以登录 Org 是小菜一碟。这里启动顺丰url不问我邮箱验证码
*** 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 关键字 "Open Browser"。我还尝试获取我所有的组织信息并将其传递给 BS 以登录 SF url。当我这样做时,因为我使用的是 Selenium 而不是在 Cci 的上下文中,我的 SF 组织现在向我抛出电子邮件验证。因此,当 运行 在 BrowserStack 上进行测试时,我觉得我无法理解如何使用 Cci 上下文。
参考:https://www.swtestacademy.com/browserstack-robotframework-integration/ and 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
预期想法:
请分享一些关于如何调整我当前的实现以在与 BrowserStack 集成时使用 Cci 关键字而不依赖 Selenium 的想法。
目前,salesforce 关键字 Open test browser
不支持使用 create webdriver
关键字。但是,很容易复制 Open test browser
所做的事情。关键是使用包含正确编码凭据的 URL。
CumulusCI 库中的关键字 Login URL
将为您 return 一个合适的 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
无法理解在 Browserstack 上启动 Salesforce url 时如何利用 "Open Test Browser" 这是一个 Cumulusci 关键字?
项目背景: 我正在使用 Robot Framework、SeleniumLibrary 和 CumulusCI 为 Salesforce 产品构建一个自动化框架(用于 functional/regression 测试),并且需要扩展自动化功能以在我正在集成它的多个 browsers/OS 上执行相同的测试与浏览器堆栈。
实现级别详细信息: RFW 和 Cci 已正确集成,并且可以在 Chrome 或 FF 中的任何本地临时组织上完美运行。在这里,我可以直接利用 Cci 关键字的全部功能,例如 "Open Test Browser",它知道 instance_url、用户名和密码等组织详细信息并具有访问令牌。所以登录 Org 是小菜一碟。这里启动顺丰url不问我邮箱验证码
*** 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 关键字 "Open Browser"。我还尝试获取我所有的组织信息并将其传递给 BS 以登录 SF url。当我这样做时,因为我使用的是 Selenium 而不是在 Cci 的上下文中,我的 SF 组织现在向我抛出电子邮件验证。因此,当 运行 在 BrowserStack 上进行测试时,我觉得我无法理解如何使用 Cci 上下文。 参考:https://www.swtestacademy.com/browserstack-robotframework-integration/ and 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
预期想法: 请分享一些关于如何调整我当前的实现以在与 BrowserStack 集成时使用 Cci 关键字而不依赖 Selenium 的想法。
目前,salesforce 关键字 Open test browser
不支持使用 create webdriver
关键字。但是,很容易复制 Open test browser
所做的事情。关键是使用包含正确编码凭据的 URL。
CumulusCI 库中的关键字 Login URL
将为您 return 一个合适的 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