在Browserstack上启动Salesforce url时,无法理解如何利用“Open Test Browser”这是一个Cumulusci关键字?
项目背景:我正在使用Robot Framework,SeleniumLibrary和CumulusCI为Salesforce产品构建自动化框架(用于功能/回归测试),并且需要扩展自动化功能,以便在我将其与之集成的多个浏览器/操作系统上执行相同的测试BrowserStack。
实施级别详细信息:RFW和Cci已正确集成,可在Chrome或FF本地的任何临时组织中完美运行。在这里,我可以直接利用Cci关键字的全部功能,例如“Open Test Browser”,它知道组织详细信息,例如instance_url,用户名和密码,并具有访问令牌。因此登录Org是蛋糕。在这里启动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关键字“Open Browser”。我还试图获取我的所有组织信息并将其传递给BS以登录SF网址。当我这样做时,因为我使用Selenium而不是在Cci的上下文中,我的SF组织现在向我发送电子邮件验证。因此,当我在BrowserStack上运行测试时,我觉得我无法理解如何使用Cci上下文。参考: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关键字,而不是在与BrowserStack集成时依赖Selenium。
目前,salesforce关键字Open test browser
不支持使用create webdriver
关键字。但是,很容易复制Open test browser
所做的事情。关键是使用包含正确编码凭据的URL。
来自CumulusCI库的关键字Login URL
将返回适当的URL。然后,无论浏览器如何打开,您都可以在任何浏览器中使用此URL。
以下示例将使用browserstack上的默认浏览器,然后登录到我的默认组织。如果您愿意,也可以将组织传递给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